Written by
최태열
on
on
[Python][프로그래머스][Level3] 입국심사
[Python][프로그래머스][Level3] 입국심사
코드
def solution(n, times):
start, end = 0, min(times)*n
while start<=end:
middle = (start+end)//2
check=sum([middle//time for time in times])
if check>=n:
end=middle-1
else:
start=middle+1
return start
이분탐색으로 풀었다.
이렇게 다짜고짜 범위가 굉장히 넓은 문제는 이분탐색인 경우가 많은것 같다.
정답의 최소는 0이고 최대는 times에서 가장 적게 걸리는 검색대에서만 심사를 전부 실시하는 경우(min(times)*n)이다.
그리고나서 middle인 시간일 때, 심사를 끝내는 명 수가 n보다 크거나 같으면 end=middle-1이 되고
작으면 start=middle+1이다.
이렇게 진행하다보면 end가 n과 같았다가 middle-1이 되었을 때 n-1인 경우가 생긴다.
그러면 end는 계속 고정되고 start만 계속 늘어나다가
end+1이 되고 그 값이 정답이 된다.
Discussion and feedback