폐쇄할 따릉이 정류소 찾기 1 : solvesql

오유찬·2026년 1월 30일

SQL

목록 보기
65/71
  1. 위도, 경도의 단위가 degree이므로 radian으로 변환
    RADIANS(lat), RADIANS(lng)

  2. updated_at가 자신보다 최근인 정류소 5개 이상
    LEFT JOIN으로 self join을 한 후에, 조건절에 s_near.updated_at > s.updated_at로 필터링

두 정류소 간의 거리가 300m 이내인 정류소를 찾아야 하는데, 다른 사람들의 풀이를 보니 수학적으로 동일한 다른 공식을 찾아서 푼 것을 확인했다. 좋은 풀이지만, 나는 그냥 문제에 주어진 풀이식 그대로 활용해서 풀려고 한다. 코딩테스트를 본다고 했을 때, 수식 변환을 그 자리에서 하지 못할 것이라는 확신이 있기 때문에..그냥 한다.

answer

-- 01. 두 장소의 거리가 300m 이내인 정류소
-- 02. updated_at가 자신보다 최근인 정류소가 5개 이상
WITH cte as (
    SELECT  s.name, s.station_id, COUNT(s_near.station_id) as cnt
    FROM    station s LEFT JOIN station s_near 
            ON s_near.updated_at > s.updated_at 
            AND 2 * 6356 * ASIN(
              SQRT( 
                POW(SIN(RADIANS(s.lat - s_near.lat) / 2), 2) + 
                COS(RADIANS(s.lat)) * COS(RADIANS(s_near.lat)) * POW(SIN(RADIANS(s.lng - s_near.lng) / 2), 2)
              )
            ) < 0.3
    GROUP BY
            s.station_id)
SELECT  name, station_id
FROM    cte
WHERE   cnt >= 5
profile
열심히 하면 재밌다

0개의 댓글