입국심사 [이분탐색]
코딩테스트 연습 > 이분탐색 > 입국심사
https://programmers.co.kr/learn/courses/30/lessons/43238
# 입력값
n = 6 # 입국심사를 기다리는 사람 수
times = [7,10] # 각 심사관이 한명을 심사하는데 걸리는 시간이 담긴 배열
# 출력값: 모든 사람이 심사를 받는데 걸리는 시간
result = 0
# 문제 구상:
# 01. 가장 빨리 끝나는 시간과 늦게 끝나는 시간을 지정
t_min, t_max = 1, max(times)*n
# 02. 가장 빨리 끝나는 시간이 가장 늦게 끝나는 시간보다 작거나 같을 경우 while문을 반복
while t_min <= t_max:
t_mid = (t_min+t_max)//2 #두 시간의 평균값을 기준으로
# 03.
cnt = 0
for t in times:
cnt += (t_mid//t) # t_mid 시간동안 해당 심사관이 처리할 수 있는 인원 수 계산
if cnt >= n: # 만약 cnt가 기다리는 사람 수 n 보다 크거나 같을 경우,
break # for 문 종료
if cnt >= n:
t_max = t_mid-1 # t_max값을 갱신
result = t_mid # result값 갱신
else: # cnt가 기다리는 사람 수 보다 작을 경우,
t_min = t_mid+1 # t_min값 갱신
result
def solution(n,times):
t_min,t_max = 1,max(times)*n
result = 0
while t_min<=t_max:
t_mid = (t_min+t_max)//2
cnt = 0
for t in times:
cnt+=(t_mid//t)
if cnt >= n:
break
if cnt >= n:
t_max = t_mid-1
result = t_mid
else:
t_min = t_mid+1
return result
# Code test
solution(n=6, times =[7,10])