프로그래머스
문제 예시를 보면 경과 시간이 1~2초인 경우가 있다. 왜 한번에 2초가 소요되는지가 문제의 포인트인데, 다리가 bridge_length만큼의 칸이 있다는 것을 알 수 있다.
그래서 초가 카운트되는 경우는, 트럭이 한칸씩 이동할때이므로, 예시에서는 [0,7]
일때 한번, [7,0]
일때 한번씩 카운트되어 2초가 소요된다.
onBridge
)로 저장한다. sum
은 다리에 올라가있는 트럭의 총 무게이다.count
는 모든 트럭이 다리를 건너는데 걸리는 초이다.truck
에 저장한다. 더이상 트럭이 없다면 0truck_weights.unshift(truck)
)function solution(bridge_length, weight, truck_weights) {
const onBridge = new Array(bridge_length).fill(0);
let sum = 0;
let count = 0;
while(onBridge.length>0) {
const truck = truck_weights.shift() || 0;
const off = onBridge.shift();
sum -= off;
if(sum+truck > weight) {
onBridge.push(0);
truck_weights.unshift(truck);
count++;
}
else if(sum+truck <= weight) {
if(truck > 0){
onBridge.push(truck);
sum += truck;
}
count++;
}
}
return count;
}
function solution(bridge_length, weight, truck_weights) {
let time = 0, qu = [[0,0]], weigthOnBridge = 0;
while(qu.length > 0 || truck_weights.length > 0) {
if(qu[0][1] === time) weightOnBridge -= qu.shift()[0];
if(weightOnBridge + truck_weights[0] <= weight) {
weightOnBridge += truck_weights[0];
qu.push([truck_weights.shift(), time+bridge_length]);
} else{
if(qu[0]) time qu[0][1]-1;
}
time++;
}
return time;
}