고속도로를 이동하는 모든 차량이 고속도로를 이용하면서 단속용 카메라를 한 번은 만나도록 카메라를 설치하려고 합니다.
고속도로를 이동하는 차량의 경로 routes가 매개변수로 주어질 때, 모든 차량이 한 번은 단속용 카메라를 만나도록 하려면 최소 몇 대의 카메라를 설치해야 하는지를 return 하도록 solution 함수를 완성하세요.
routes return
[[-20,-15], [-14,-5], [-18,-13], [-5,-3]] 2
-5 지점에 카메라를 설치하면 두 번째, 네 번째 차량이 카메라를 만납니다.
-15 지점에 카메라를 설치하면 첫 번째, 세 번째 차량이 카메라를 만납니다.
이번 문제는 그리디 알고리즘을 통해 해결하였다. 우선 routes를 도착지점을 기준으로 오름차순 정렬해주고, 카메라의 위치 cur을 -30001로 설정해주었다. 그리고 routes를 순회하며 만약 시작점이 cur보다 작거나 같다면 이는 카메라 안에 포함되는 것으로 간주되기 때문에 카메라 수를 증가시키지 않고 넘어간다. 만약 그렇지 않은 경우에는 answer를 1 증가시키고, cur을 현재의 종료지점으로 갱신해준다. 종료지점으로 갱신하는 이유는 종료지점에 설치해야 최대한 많은 수의 차의 경로와 겹칠 수 있기 때문이다. 이러한 방식으로 해결하였다.
def solution(routes):
answer = 0
routes.sort(key=lambda x:x[1])
cur = -30001
for start, end in routes:
if start <= cur:
continue
else:
answer += 1
cur = end
return answer