[Level3] 입국심사

Quesuemon·2021년 4월 1일
0

코딩테스트 준비

목록 보기
58/111

🛠 문제

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


👩🏻‍💻 해결 방법

이분 탐색으로 어떻게 접근해야 할지 몰라서 어려웠다...
수의 범위는 1부터 가장 시간이 적게 걸리는 심사대에서 모든 사람이 심사받는 경우의 수로 설정하고,
만약 해당 시간 안에 n명의 사람을 다 검사할 수 있으면 mid를 answer에 저장해주고 right=mid-1과 break를 해주었다
해당 시간 안에 모든 사람의 검사를 마치지 못했다면 start=mid+1을 통해 시간을 늘려주었다

소스 코드

def solution(n, times):
    answer = 0
    right = min(times) * n
    left = 1
    
    while left <= right:
        mid = (left + right) // 2
        tmp = n
        for i in times:
            tmp -= mid // i
            if tmp <= 0:
                answer = mid
                right = mid - 1
                break
        if tmp > 0:
            left = mid + 1
    return answer

💡 다른 사람의 풀이

def solution(n, times):
    answer = 0
    start, end, mid = 1, times[-1] * n, 0

    while start < end:
        mid = (start + end) // 2
        total = 0
        for time in times:
            total += mid // time

        if total >= n:
            end = mid
        else:
            start = mid + 1
    answer = start
    return answer

0개의 댓글