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

단간단간·2024년 3월 28일
0

알고리즘 문제

목록 보기
26/106
  • 링크:
    https://school.programmers.co.kr/learn/courses/30/lessons/42583
  • 회고:
    - deque는 스택이나 큐와 같은 데이터 구조를 파이썬에서 효과적으로 구현하고 싶을 때 유용하다.
    - 처음에 문제 이해를 잘 못했는데, 1초에 1칸씩 트럭이 움직인다고 보면 된다.
    - 로직의 순서를 미리 다이어그램으로 구상해보는 것도 좋을 것 같다.

from collections import deque


def solution(bridge_length: int, weight: int, truck_weights: list) -> int:
    time = 0
    bridge = deque([])
    truck_weights = deque(truck_weights)
    bridge_weight = 0

    while truck_weights or bridge:
        time += 1

        # 잔재 시간이 bridge_length - 1초가 된 트럭 제거 & 현재 다리 위 총 트럭 무게 업데이트
        if bridge and bridge[0][1] == bridge_length - 1:
            truck_weight, _ = bridge.popleft()
            bridge_weight -= truck_weight

        # 현재 다리위에 있는 트럭의 잔재 시간 1초씩 늘려 주기
        for state in bridge:
            state[1] += 1

        if truck_weights and bridge_weight + truck_weights[0] <= weight:
            truck_weight2 = truck_weights.popleft()

            bridge_weight += truck_weight2
            bridge.append([truck_weight2, 0])

    return time
profile
simple is best

0개의 댓글