문제링크 : https://programmers.co.kr/learn/courses/30/lessons/42884
푼 풀이
풀이방식은 각 time stamp별로 가장 많은 차량있는 time stamp를 확인하고
그 구간에 카메라를 설치
카메라에 커버되는 차량들을 routes에서 제거
로 풀었는데 테스트케이스 2개를 통과못하네요..
그리디로 풀었는데 그리디 조건(가장 많은 차들이 있는 구간에 카메라를 설치) 이 이게 맞는지,
맞다면 어떤 케이스를 고려를 못했는지 잘 모르겠습니다.
def solution(routes):
camera = 0
while routes:
### get all time stamps
in_ts, out_ts = [], []
for it, ot in routes:
in_ts.append(it)
out_ts.append(ot)
### for all time stamps, find max congestion time
car, max_count = 0, -1
for ts in sorted(in_ts+out_ts):
if ts in in_ts:
car += 1
if car > max_count:
max_count = car
peak_time = ts
if ts in out_ts:
car -= 1
###install camera
camera += 1
### remove route covered by camera
for r in routes[:]:
if r[0] <= peak_time and r[1] >= peak_time:
routes.remove(r)
return camera
print(solution([[-2,-1], [1,2],[-3,0]])) #2
print(solution([[0,0],[-1,0],[0,0],[2,3],[0,0]])) #1
print(solution([[0,1], [0,1], [1,2]])) #1
print(solution([[0,1], [2,3], [4,5], [6,7]])) #4
print(solution([[-20,-15], [-14,-5], [-18,-13], [-5,-3]])) #2
print(solution([[-20,15], [-14,-5], [-18,-13], [-5,-3]])) #2
print(solution([[-20,15], [-20,-15], [-14,-5], [-18,-13], [-5,-3]])) #2
가장 많은곳이 정답이 아닐수도 잇는데
아닌 케이스를 대실수있나요?
해당 댓글은 삭제되었습니다.
첫번쨰 루트가 [-20, -15] 인데 오타인거같아요
이런 문제를 풀 땐 카메라를 구간의 맨왼쪽에 붙여보거나 오른쪽에 붙여보는 거임.
근데 상식적으로 생각해봐도 오른쪽으로 붙여야 덜 설치할 수 있겠지?
그림을 그려서 보면 더 이해하기 쉬울거임
그럼 어케 푸느냐, 인풋으로 들어오는 구간 배열을 각 구간들이 끝나는 지점에 대해 오름차순으로 정렬
마자막 카메라 위치변수를 min value로 설정하고 마지막 위치가 구간 시작점보다 작을때만 설치해주면됨. 그리고 마지막 위치는 그 구간의 끝점으로 다시 초기화하고
그럼 겹치는 구간이 있을떄마다 다 설치한다는 말이 되지 않나요? local solution은 현재 시점에서 가장 차가 많이 보이는 시점 기준에 카메라를 설치한다라고 보면 안되나요??.
아니죠 병신님아... 그림 그려보라니깐; 만약 안 겹치면 그 안 겹친 구간 맨 오른쪽에 설치를 해야 최소화 해서 설치를 하겠죠