문제
요약
- n명의 사람이 입국심사를 받기 위해 줄을 서있다.
- 각 입국 심사대는 한 명 씩 심사를 진행한다. 각 심사대는 심사에 걸리는 시간이 다르다.
- 가장 앞에 서 있는 사람은 비어있는 심사대에 가서 심사를 받거나, 더 빨리 심사가 끝나는 심사대가 있다면 그곳으로 가서 심사를 받을 수 있다.
- 모든 사람이 심사를 받는데 걸리는 시간의 최솟값을 반환하자.
분류
- 이진탐색
풀이
1. 내 풀이
- 특이사항으로, 입국심사를 기다리는 최대 인원수 제한이 1,000,000,000명이다. 심사대의 심사 최대 시간도 1,000,000,000분이다. 전체적으로 수가 크다. 결국 answer 에 해당하는 반환값을 기준으로 생각해야한다.
- 모든 사람이 심사를 받는 시간을 가장 짧게 하려면, 모든 심사대가 쉼 없이 돌아가야 한다.
- 주어진 시간 내에 몇 명이 각 심사대에서 심사받을 수 있는지 구한 후, 더하면 최대 심사 인원이 나온다. 심사받은 사람들의 수를 기준으로 생각했기 때문에, 심사대에 사람이 없는 시간은 고려하지 않아도 된다.
def solution(n, times):
answer = 0
left, right = 0, n * max(times)
while left <= right:
mid = (left + right) // 2
people = 0
for time in times:
people += mid // time
if people > n: break
if people >= n:
answer = mid
right = mid - 1
elif people < n:
left = mid + 1
return answer