title: "[프로그래머스] 다리를 지나는 트럭 Python 파이썬 해설 (Level 2) - 이도훈"
cleanUrl: "programmers/42583"
description: "프로그래머스 Level 2 문제 [다리를 지나는 트럭]의 풀이를 정리합니다."

문제 설명 및 제한사항

아이디어 및 해결 방법

코드

from collections import deque

def solution(bridge_length, weight, truck_weights):
    # 초 단위로 각 트럭 별 위치를 모니터링할 수도 있겠지만,
    # 좀 더 효율적인 방법을 찾아봅시다.
    # 
    # 리스트 하나와 정수 값 하나를 관리합니다.
    # 리스트 out[t]는 시간 t때 트럭이 탈출하여 줄어드는 weight의 배열입니다.
    # 정수 값은 현재 다리 위에 올라가 있는 트럭의 무게 총합입니다.
    i, t = 0, 1
    q, weightsum = deque(), 0
    
    while i < len(truck_weights):
        # 다리 위에 올라갈 수 있을 만큼 트럭을 올려보냅니다.
        while i < len(truck_weights) and weightsum + truck_weights[i] <= weight:
            # t때 올라간 트럭의 탈출 시간은 t + bridge_length 입니다.
            q.append( (truck_weights[i], t + bridge_length) )
            weightsum += truck_weights[i]
            
            i += 1
            t += 1
            # 시간이 t가 되어서 트럭이 탈출해야 하는 상황을 처리합니다.
            if q[0][1] == t:
                w, t = q.popleft()
                weightsum -= w
        
        #  트럭이 탈출하는 시점으로 이동합니다.
        if len(q) > 0:
            w, t = q.popleft()
            weightsum -= w
        
    # 큐의 트럭들을 모두 탈출시킵니다.
    while len(q) > 0:
        w, t = q.popleft()
    
    return t

출처

프로그래머스 코딩테스트 연습 https://school.programmers.co.kr/learn/challenges