알고리즘
프로그래머스(programmers) 단속카메라 python 정답 [Greedy Algorithm]
TheSapper
2023. 2. 19. 21:06
반응형
프로그래머스(programmers) 단속카메라 python 정답 [Greedy Algorithm]
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/42884
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 정답
입출력 예
routes | return |
[[-20,-15], [-14,-5], [-18,-13], [-5,-3]] | 2 |
정답 코드
def solution(routes):
answer = 0
# 무조건 만나야 하는 위치(종료 위치)
# 핵심 기준점 정렬
sorted_routes = sorted(routes,key=lambda x : x[1])
prev =-30001
for route in sorted_routes:
if prev < route[0]:
answer +=1
prev = route[1]
return answer
문제 해설
일단 routes를 종점 기준으로 정렬한다.
해당 종점 전까지는 카메라 설치를 최대한 늦출 수 있기 때문이다.
그럼 언제 카메라를 설치하면 될지 알아보자
아래 그림을 예로 들겠다.
다음과 같이 1번의 마지막에 카메라를 설치하는 것은 확정적이다.
마지막에 설치해야 최대한 prev아 앞에 있는 route들의 카메라 설치를 미룰 수 있다.
이 점을 prev로 기억한다.
answer +=1
prev = routes[1] # 뒷점
이 prev점은 2와 3의 시작점보다 뒤에 있다
따라서 2와 3을 처리할 때는 카메라를 설치할 필요가 없다
(prev >=route[0])
하지만 이 prev점은 4의 시작점 보다 앞에 있다.
따라서 카메라를 하나 더 설치해야 한다.
이 경우 카메라를 가장 적게 설치하려면 1번과 동일하게 4의 마지막에 설치하면 된다.
answer +=1
prev = routes[1] # 뒷점
이 논리를 반복해서 처리하면 답이 나온다.
시간복잡도는 정렬에 의한 O(nlogn)이다.
반응형