#심사자가 최대 몇명을 입국심사를 해줄수 있는지 구함
def canHandle(times, timeGiven):
total = 0
for t in times:
total += (timeGiven // t) # 17mintues/7= 2persons 17mintues/10= 1 person
return total
#return sum(time // t for t in times)
def solution(n, times):
left, right = 0, max(times) * n
#더적은 시간으로 시도할수있도록 범위를 줄여나가 #최소의 심사시간을 리턴
while left <= right:
mid = (left + right) // 2
maxHandle = canHandle(times, mid)
if maxHandle >= n:
right = mid - 1
else:
left = mid + 1
return left
이분탐색의 개념은 어렵지 않은데 문제를 이해하는데 어려웠다.
포인트는 입국심사를 하는 시간을 최소로 줄여나가는 것이고, 심사관이 최대 몇 명을 심사할 수 있는지와 주어진 입국심사하는 사람의 수를 비교하는 것이 필요했다. 이분탐색의 핵심인 미드가 바로 최대 몇 명을 할 수 있는지 구하는 함수의 매개변수로 주어지고, 미드를 업데이트할 때마다 그 함수를 부르고 그 함수가 리턴하는 값이 주어진 입국심사자의 수 보다 작거나 크거나에 따라 오른쪽/왼쪽 값을 감소/증가시킨다.