- 문제
고속도로를 이동하는 모든 차량이 고속도로를 이용하면서 단속용 카메라를 한 번은 만나도록 카메라를 설치하려고 합니다.
고속도로를 이동하는 차량의 경로 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 |
- 코드
def solution(routes):
answer = 1
routes.sort(key=lambda x:x[0], reverse=True)
now = routes[0][0]
for i in routes[1:]:
if i[1] >= now:
continue
else:
now = i[0]
answer += 1
return answer
최소 카메라를 설치하는 문제이기 때문에 greedy방식으로 가장 끝에서부터 확인을 한다.
1. 위의 예시에서 routes를 고속도로 진입시점을 기준으로 정렬을 한다. 그 이유는 맨마지막의 진입시점에 카메라를 한대 설치하고 모든 차량의 나가는시점이 그 이후면 카메라를 1대만 설치해도 되기 때문이다.
[[-5, -3], [-14, -5], [-18, -13], [-20, 15]]
2. -5를 시작점으로 잡고 answer=1을 default로 시작한다
3. routes[1:]은 시작점은 이미 포함시켰기 때문에 첫번째 이후의 값을 for문으로 탐색
4. 이후 차량의 고속도로 나가는 시점을 확인한다.
(1) 만약 나가는 시점이 now현재 설치되어있는 카메라 시점보다 크거나 같다면 새로운 단속카메라를 설치할 필요가 없기 때문에 무시하고 넘어간다.
(2) 나가는 시점이 now현재 설치되어있는 카메라 시점보다 작다면 새로운 카메라를 설치해야하는데 카메라를 최대한 다른 차량도 포함될수 있도록 고속도로 진입시점에 설치를 한다.
ex) now:-5 / 두 번째 차량 나가는 시점:-5 -> 단속카메라에 걸리기 때문에 무시하고 넘어가기
now:-5 / 세 번째 차량 나가는 시점:-13 -> 단속카메라에 걸리지 않기 때문에 새로운 카메라 설치
now=-18 / answer = 2
now = -18 / 네 번째 차량 나가는 시점: 16 -> 단속카메라에 걸리기 때문에 무시하고 넘어가기
- 출처
programmers.co.kr/learn/courses/30/lessons/42884?language=python3
'알고리즘' 카테고리의 다른 글
프로그래머스 행렬의 곱셈 (python, 파이썬) (0) | 2020.11.27 |
---|---|
프로그래머스 입국심사 (python, 파이썬) (0) | 2020.11.23 |
백준 1922번: 네트워크 연결 (python, 파이썬) (0) | 2020.11.17 |
프로그래머스 완주하지 못한 선수 (python, 파이썬) (0) | 2020.11.17 |
프로그래머스 여행경로 (python, 파이썬) (0) | 2020.11.08 |
댓글