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

less than 1 minute read

개요

이번 문제는 큐를 활용한 문제이다. 그렇게 어렵지는 않았으나 각 로직을 실행하는 순서때문에 경과시간이 1초씩 차이가 나는 부분에서 애를 좀 먹었다.

분류

  • Level 2
  • 스택/큐

요점

  • 다리를 지날때에는 한대씩만 빠져나간다.
  • 빠져나가는순간에 대기중인 트럭이 들어올 수 있다.
  • 대기 트럭의 순서는 변경할 수 없다.

어려웠던 부분

  • 처음에 빠져나가는순간에 대기중인 트럭이 들어올 수 있는 부분을 생각하지 못하여 좀 헛갈렸음

코드(javascript)

function solution(bridge_length, weight, truck_weights) {
    var answer = 0;
    let timer = 0;

    let bridgeQueue = [];
    let weightSum = 0;


    // 다리를 건너는 트럭과
    // 대기 트럭 모두 없을때 모든 트럭이 다리를 지났다고
    // 간주함
    while (true) {


        timer++;

        //다리를 지남
        if(bridgeQueue.length > 0 && bridgeQueue[0].progressTime === bridge_length){
            weightSum = weightSum - bridgeQueue[0].weight;
            bridgeQueue.shift();
        }


        //투입
        if(bridgeQueue.length < bridge_length && weightSum + truck_weights[0] <= weight){
            let truck = truck_weights.shift();
            weightSum = weightSum + truck;
            bridgeQueue.push({
                weight : truck,
                progressTime : 0
            })
        }

        //대기중인 트럭의 시간 증가
        bridgeQueue.forEach(function(element,index){
            element.progressTime = element.progressTime + 1;
        });

        //종료
        if(bridgeQueue.length === 0 && truck_weights.length ===0){
            break;
        }


        
    }

    return timer;
}

Leave a comment