문제
[프로그래머스] - 입국 심사
접근 방법
- 정답 최솟값은 1(
start
), 최댓값은 max(times)*n(end
)
- 위의 start와 end를 가지고 이분탐색 시작.
- mid 시간 동안 심사 받은 사람 수는 mid 시간에서 각 심사관의 소요시간으로 나눈 몫의 합
- 통과한 사람의 수가 n보다 작다면 start = mid + 1, n보다 크다면 end = mid - 1
- 최종적으로 n명이 통과할 수 있는 최소 시간을 구해야 하므로,
mid 동안 심사 받은 사람 == n
이어도 계속해서 탐색한다.
작성 코드
def solution(n, times):
answer = 0
start = 1
end = n * max(times)
while start <= end :
mid = (start+end) // 2
people = 0
for time in times:
people += mid // time
if people >= n :
end = mid - 1
answer = mid
else:
start = mid + 1
return answer