개발/알고리즘

[프로그래머스] 다리를 지나는 트럭

Woogie2 2022. 2. 28. 18:54
반응형

알고리즘 고득점 Kit 풀이중 ..

from collections import deque
def solution(bridge_length, weight, truck_weights):
    answer = 0
    on_bridge_w = 0
    # 대기 큐
    q = deque(truck_weights)
    # 다리
    b = deque()
    
    # 현재 시각
    sec = 0
    
    while q:
        # 대기 큐에서 트럭 pop
        t_w = q.popleft()
        
        # 다리 위에 차 있는 경우 제일 먼저 진입한 차량을 다리 길이만큼 움직였는지 확인.
        # w는 무게, s는 출발 시각
        if len(b):
            w, s = b.popleft()
            if sec - s != bridge_length:
                b.appendleft((w,s))
            else:
                on_bridge_w -= w
                
        # 다리에 차가 꽉 찬 경우(대기하기)
        if len(b) == bridge_length:
            q.appendleft(t_w)
            sec += 1
            continue
        # 차가 진입 가능한 경우 
        if on_bridge_w + t_w <= weight:
            b.append((t_w, sec))
        # 다리 위의 트럭 무게 합
            on_bridge_w += t_w
        
        # 진입 불가한 경우
        else:
            q.appendleft(t_w)
            
        sec += 1
        
    # 마지막에 대기 트럭은 없고 다리 건너는 트럭 존재하는 경우 시간 카운트 해주기
    while len(b):
        w, s = b.popleft()
        if sec - s != bridge_length:
            b.appendleft((w,s))
        else:
            on_bridge_w -= w
        sec += 1
        
    return sec
반응형