알고리즘

[알고리즘] 유클리드 거리 & 맨해튼 거리

취업 드가자잇 2024. 6. 3. 22:28

 

https://school.programmers.co.kr/learn/courses/30/lessons/67256

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

해당 문제를 풀며 키패드 간의 거리를 계산하기 위해서는 두 좌표(이전 키패트와 현재 키패드의 거리)의 거리를 계산해야한다고 생각해 유클리드 거리를 사용했지만 제대로 풀리지 않았다.

고려하지 못했던 것은 유클리드 거리는 대각선 이동을 포함한 직선 거리를 계산하기 때문에, 수평 및 수직 방향으로만 이동 가능한 키패트 문제에서는 실제 이동 거리와 맞지 않는다는 것이다. 

그래서 맨해튼 거리를 사용했더니 문제없이 풀렸다. 

어릴때 수학 공부를 소홀히 한 것이 지금 와서 많이 체감이 되고 있다...

 

맨해튼 거리 (Manhattan Distance)

 

맨해튼 거리는 두 점 사이의 거리 중 격자 형태의 도로망을 따라 이동해야 하는 경우 사용된다.

예를 들어, 뉴욕 시처럼 격자형 도로망, 혹은 키패트에서 두 위치 사이의 이동 거리를 계산할 때.

Manhattan distance 

Math.abs(x2​−x1)+ Math.abs(y2​−y1);

 

유클리드 거리 (Euclidean Distance)

두 점 사이의 실제 직선 거리를 구할 때 사용된다. 

예를 들어, 지도에서 두 위치 사이의 직선 거리를 계산할 때.

Euclidean distance 

Math.sqrt(Math.pow(x2​−x1​, 2) + Math.pow(y2​−y1​, 2);