이진 탐색을 할 때는
- 이진탐색의 범위는 어디까지 잡아야할지
- 탐색키는 무엇으로 할지 를 정해야한다.
1
, right = max(times) * n
으로 정한다.max(times) * n
: 가장 비효율적으로 모든 사람을 심사하는 데 걸리는 시간mid - 1
로 갱신mid + 1
로 갱신def solution(n, times):
answer = 0
left = 1
right = max(times) * n
while left <= right:
mid = (left + right) // 2
people = 0 # mid분동안 심사 가능한 사람 수
for time in times:
people = people + (mid // time) # 예: mid=33일 떄, 33//7 + 33//10 = 7
if people >= n: # 심사가능한 사람의 수(people)가 심사 받아야할 사람의 수(n)보다 많거나 같은 경우
answer = mid # 최소 걸리는 시간을 mid분으로 갱신
right = mid - 1
elif people < n: # 심사가능한 사람의 수(people)가 심사 받아야할 사람의 수(n)보다 적은 경우
left = mid + 1
return answer