코딩테스트/python

[programmers/python] 입국심사 문제 풀이 - 이분 탐색(Parametric Search)

zyin 2025. 5. 21. 05:00

 

문제 설명

 

모든 사람이 심사를 마치는 데 걸리는 최소 시간을 구하는 것이 목표이다.


핵심 아이디어

어떤 시간 t가 주어졌을 때, 그 시간 동안 각 심사관이 처리할 수 있는 사람 수는 t // time으로 계산할 수 있다. 모든 심사관의 처리 가능 인원을 더하면, t분 동안 총 몇 명을 처리할 수 있는지 알 수 있다.

total = sum(t // time for time in times)

이제 이 값을 기준으로 시간 t를 이분 탐색하며, n명 이상을 처리할 수 있는 가장 작은 t를 찾는 방식이다.


코드

def solution(n, times):
    l = 1
    r = max(times) * n
    ans = r

    while l <= r:
        m = (l + r) // 2
        total = sum(m // t for t in times)

        if total >= n:
            ans = m
            r = m - 1
        else:
            l = m + 1

    return ans

예시

n = 6
times = [7, 10]
  • 28분이면 6명 모두 심사를 받을 수 있다.
  • 이분 탐색을 통해 최소 시간을 찾으면 정답은 28이다.