1. 문제 설명
programmers.co.kr/learn/courses/30/lessons/42884
코딩테스트 연습 - 단속카메라
[[-20,15], [-14,-5], [-18,-13], [-5,-3]] 2
programmers.co.kr
문제 설명
고속도로를 이동하는 모든 차량이 고속도로를 이용하면서 단속용 카메라를 한 번은 만나도록 카메라를 설치하려고 합니다.
고속도로를 이동하는 차량의 경로 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 지점에 카메라를 설치하면 첫 번째, 세 번째 차량이 카메라를 만납니다.
2. 풀이
그리디로 풀어야 한다 !
def solution(routes):
re_routes = sorted(routes, key = lambda x:x[1])
cnt = 1
for idx, one_car in enumerate(re_routes):
if idx == 0:
last_end = one_car[1] # 첫번째 리스트 끝지점은 무조건 설치
else:
if one_car[0] <= last_end <= one_car[1]: # 이전 카메라 이번 범주안에 속하면
continue # 설치 안해
else:
cnt += 1 # 아니면 설치하구
last_end = one_car[1] # 설치 지점 기록 업데이트
return cnt
그때 그때 설치를 해나가는 방식으로 그리디로 풀어야 한다,
하지만 입력형식 그대로 했을 때는
그때 그때 설치를 해야하는 지 말아야하는지 판단하기 힘들다
따라서 정렬을 해줘야 하는데, 끝나는 기점을 기준으로 오름차순을 했다. ***
이후 입력은 [-18,-13] [-14,-5] [-5,-3] [-20,15]
이렇게 되는데, 끝나는 지점을 기준으로 정렬을 해야
다음 자동차 경로 구간이랑 겹치는지 아닌지를 판단할 수 있기 때문이다 !
1) 우선 첫번째 리스트 끝지점은 항상 설치해둠
2) 두번째 리스트 들어왔을때 첫번째 끝지점이 두번째 리스트 범위안에 포함하는지 확인
한다면, 두번째 리스트 안에는 설치 안함
안한다면, 두번째 리스트 끝나는 지점에 설치
이렇게 바로 전후의 리스트 범위만 비교해나가며 설치 할때마다 카운트를 세고,
마지막에 전체 카운트 값을 출력해주면 끝 !
핵심은 리스트 정렬을 끝지점으로 하는건데
[백준][Greedy] 1931번 문제 - 회의실배정 python (200804)
1. 문제설명 즉, 여기서 중요한 거는 최대한 많은 회의실을 배정하게끔 알고리즘을 짜는건데 나는 이걸 회의시간 길이가 짧은 친구들을 중심으로 정렬하면 되겠다고 생각했다. 결론부터 말하자�
huidea.tistory.com
예전에 풀었던 이 문제랑 아주 유사해서 쉽게 풀었다.
'Study > Algorithm & Data structure' 카테고리의 다른 글
[프로그래머스][greedy] 최소스패닝트리 (크루스칼)(201016) (0) | 2020.10.17 |
---|---|
[프로그래머스][greedy] 섬연결하기(201015) (0) | 2020.10.15 |
[프로그래머스][탐색] 스킬트리(201013) (0) | 2020.10.14 |
[백준] 1026번 보물 python (201011) (0) | 2020.10.11 |
[백준] 1018번 체스판 다시 칠하기 python (201010) (0) | 2020.10.10 |
댓글