[ Programmers / CodingTest / Python ] 단속카메라

황승환·2022년 10월 7일
0

Python

목록 보기
494/498

문제 설명

고속도로를 이동하는 모든 차량이 고속도로를 이용하면서 단속용 카메라를 한 번은 만나도록 카메라를 설치하려고 합니다.

고속도로를 이동하는 차량의 경로 routes가 매개변수로 주어질 때, 모든 차량이 한 번은 단속용 카메라를 만나도록 하려면 최소 몇 대의 카메라를 설치해야 하는지를 return 하도록 solution 함수를 완성하세요.

제한사항

  • 차량의 대수는 1대 이상 10,000대 이하입니다.
  • routes에는 차량의 이동 경로가 포함되어 있으며 routes[i][0]에는 i번째 차량이 고속도로에 진입한 지점, routes[i][1]에는 i번째 차량이 고속도로에서 나간 지점이 적혀 있습니다.
  • 차량의 진입/진출 지점에 카메라가 설치되어 있어도 카메라를 만난것으로 간주합니다.
  • 차량의 진입 지점, 진출 지점은 -30,000 이상 30,000 이하입니다.

입출력 예

routes										return
[[-20,-15], [-14,-5], [-18,-13], [-5,-3]]	2

입출력 예 설명

-5 지점에 카메라를 설치하면 두 번째, 네 번째 차량이 카메라를 만납니다.

-15 지점에 카메라를 설치하면 첫 번째, 세 번째 차량이 카메라를 만납니다.

접근 방법

이번 문제는 그리디 알고리즘을 통해 해결하였다. 우선 routes를 도착지점을 기준으로 오름차순 정렬해주고, 카메라의 위치 cur을 -30001로 설정해주었다. 그리고 routes를 순회하며 만약 시작점이 cur보다 작거나 같다면 이는 카메라 안에 포함되는 것으로 간주되기 때문에 카메라 수를 증가시키지 않고 넘어간다. 만약 그렇지 않은 경우에는 answer를 1 증가시키고, cur을 현재의 종료지점으로 갱신해준다. 종료지점으로 갱신하는 이유는 종료지점에 설치해야 최대한 많은 수의 차의 경로와 겹칠 수 있기 때문이다. 이러한 방식으로 해결하였다.

solution.py

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

profile
꾸준함을 꿈꾸는 SW 전공 학부생의 개발 일기

0개의 댓글