프로그래머스-다리를 지나는 트럭
개요
이번 문제는 큐를 활용한 문제이다. 그렇게 어렵지는 않았으나 각 로직을 실행하는 순서때문에 경과시간이 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