def solution(n, times):
answer = 0
times.sort()
left = 1 # 최소 시간
right = max(times) * n # 최대 시간
# 대상 : 검색 시간의 범위
while left <= right:
mid = (right + left) // 2
remain_cnt = n # 남아있는 사람 수
for time in times:
remain_cnt -= mid // time
if remain_cnt <= 0:
answer = mid
right = mid - 1
break
if remain_cnt > 0:
left = mid + 1
return answer
이진 탐색
이진 탐색을 이용해 시간 복잡도를 줄인다.
최소 시간
제한 사항에서
입국심사를 기다리는 사람은 1명 이상, 한 명을 심사하는데 걸리는 시간이 1분 이상이기 때문에 최소 시간은 1분이라고 할 수 있다.
최대 시간
가장 느린 심사위원의 시간이 모든 심사위원에게 적용되는 경우이다.
right = max(times) * n
이진 탐색이라는 힌트가 있어도 못 풀었던 문제.
이진 탐색의 대상을 찾는 게 정말 힘든 듯하다..