[プログラマー]橋を渡るトラック


質問リンク


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

解答方法


問題を解決するよりも、問題を理解するのに時間がかかった.
まず、待機中のトラック、橋を渡るトラックは行列の形で先進的な順序で離れることができます.私が理解している橋を渡る2つの重要な条件は以下の通りです.
1台の
  • トラックが橋を渡るには橋の長さ秒
  • が必要だ.
  • 毎秒1台のトラックの上橋または下橋
  • しかありません.
    したがって,この条件に従ってwhile文で1秒ごとに時間をチェックする.その後、on bridge、cart weightsリストが空の場合、重複文を終了し、対応する時間を返します.

    コード#コード#

    def solution(bridge_length, weight, truck_weights):
        sec = 0
        on_bridge = []
        truck_weights = truck_weights[::-1]     # [-1] 요소를 pop 하기 위해 reverse 해서 사용
    
        # 대기 중이거나 다리를 건너는 트럭이 있을 경우
        while truck_weights or on_bridge:
            sec += 1
            # 다리를 건너는 트럭이 있고, 가장 첫 트럭이 다리를 다 건넜다면 pop
            if on_bridge and on_bridge[0][1] <= sec:
                on_bridge.pop(0)
            # 대기 중인 트럭이 있고, 다리 길이 및 무게 조건을 만족했을 경우 append
            if truck_weights and len(on_bridge) + 1 <= bridge_length and sum([truck[0] for truck in on_bridge]) + truck_weights[-1] <= weight:
                on_bridge.append([truck_weights.pop(), sec + bridge_length])
    
        return sec