본문 바로가기

열정가득한 개발자의 이야기/hacker Rank SQL 문제

Weather observation station 19

 

문제를 맞닥트렸을 때, 정말 졸았습니다..

유클리드 거리를 구하라니..

피타고라스도 가물가물한데..

그래서 식을 찾아봤습니다. 

 

식 : 

 

위키피디아

음... 더모르겠,,, 

더 찾아보니 쉽게 식을 풀어보면 루트((x - x) *2 + (y - y) * 2)입니다.

이걸 mysql로 옮기면 아래와 같아요.

 

우선 문제를 해석해 드리겠습니다. 

 

P1(a, c)와 P2(b, d)가 있고, (a, b)는 각각 LAT_N의 최대, 최솟값이고, (c, d)는 각각 LONG_W의 최대, 최솟값입니다. 

즉, (A - B) * 2 + (C - D) *2가 되어야 합니다.  그리고 문제에서 요구한 것이 소수 점 넷째 자리까지 출력입니다. 

 

답안 : 

SELECT ROUND(SQRT(POWER(MIN(LAT_N) - MAX(LAT_N),2) + POWER(MIN(LONG_W) - MAX(LONG_W),2)),4)
FROM STATION

 

먼저 안의 식부터 풀이해 보겠습니다. 

1) POWER(X, Y)는 X를 Y의 수만큼 곱하라는 것인데 예로 POWER (2,3)이면 2*2*2를 실행하라는 뜻입니다. 그러니 유클리드 거리식의 * 2 부분을 충족하는 부분입니다. 

2) SQRT는 제곱근 (루트)를 구하는 부분입니다. 

3) ROUND()는 문제에서 요구한 소수점 넷째 자리 수까지 나오게 하는 기능입니다.

 

정말.. 저번에 SQL로 별 찍으라고 했을 때도 식은땀 났는데 이번엔 유클리드라니..

그리 어려운 식은 아니지만 이런 걸 SQL로 풀으라는 건 처음이라.. 정말 당황스러웠습니다. 

 

프로그래머스에서 보지 못한 문제 형식이라 정말 짜릿하네요 

허허