이분탐색 - 입국심사

송다은·2024년 10월 15일
from collections import deque
def solution(n, times):
    answer = 0
    #times에서 --로 줄어들 때마다 answer+1, 심사대가 채워지면 n-1 
    time = 0
    #visited = [False] * len(times) #심사대 여부 
    #queue = deque()
    
    while n :
        em_visited = 0
        for i in range(len(times)):
            times[i] -= 1 
        time =+1 #1초 
        if any(i == 0 for i in times):
            em_visited = times.count(0)
            n = n - em_visited
            
    return time

처음으로 작성한 코드이지만 실행시간이 10초 이상이란다.. 지피티에게 물어보니 논리는 맞지만 매우 비효율적이라고 해서 다른 코드를 한 번 찾아보았다

def solution(n, times):
    left = min(times)  # 최소 시간
    right = max(times) * n  # 최대 시간

    while left < right:
        mid = (left + right) // 2  # 중간 시간
        # 현재 mid 시간 동안 처리할 수 있는 인원 수를 계산
        people_processed = sum(mid // t for t in times)

        if people_processed >= n:
            right = mid  # 처리 가능 인원이 n명 이상이면 시간을 줄여본다.
        else:
            left = mid + 1  # 처리 가능 인원이 n명 미만이면 시간을 늘려본다.

    return left  # 최소 시간이 도달한 시점이 left에 저장된다.

와우.... 시간을 하나씩 늘린다는 것과 아예 다르게 접근을 하는 거 였다....
말 그대로 '최소 시간'을 찾아보는 것!!
이분 탐색은 더 많이 풀어봐야 할 것 같다...ㅜㅜ

profile
Anomaly Detection, AI Security, Multimodal

0개의 댓글