문제

programmers.co.kr/learn/courses/30/lessons/43238

 

코딩테스트 연습 - 입국심사

n명이 입국심사를 위해 줄을 서서 기다리고 있습니다. 각 입국심사대에 있는 심사관마다 심사하는데 걸리는 시간은 다릅니다. 처음에 모든 심사대는 비어있습니다. 한 심사대에서는 동시에 한

programmers.co.kr

 

문제풀이

이분탐색을 통해 심사 최소 시간을 구한다.

각 시간동안 심사관이 심사할 수있는 사람수를 구하여 

총 심사한 사람수가 n 보다 크다면 최소 시간을 줄여나가는 방식으로 이분탐색.

 

코드

def solution(n, times):
    answer = 0
    low = 0
    high = max(times) * n

    while low <= high:

        # 입국심사 최소 시간
        mid = (low + high) //2 

        count = 0
        for time in times:
            count = count + mid // time

            # 모든 인원을 검사 가능 하면 break
            if count >= n:
                break

        # 모든 인원을 검사 가능하면 answer을 업데이트 해주고
        # 최소 시간을 줄여나간다.
        if count >= n :
            high = mid - 1
            answer= mid
        # 모든인원을 검사 할수 없으면 최소 시간을 늘린다.
        else :
            low = mid +1 


    return answer
solution(6,[7,10])
ariz1623