bridge라는 queue를 만들고, 다음 시간의 다리의 무게를 예측해서, 트럭이 올라갈 수 있는지 아닌지 확인해본다.
다음 시간의 다리의 무게 = 현재 다리의 있는 무게의 총합 + 가장 맨 앞의 트럭의 무게 - 다리의 맨 앞에있는 트럭의 무게
function solution(bridge_length, weight, truck_weights) {
var answer = 0;
//다리 길이를 표현한 배열
let bridge = new Array(bridge_length).fill(0);
let time =0;
while(truck_weights.length !== 0){
//다음것을 미리 예측하는 sum
// 즉, bridge[0]을 뺴고, truck_weight[0]번째를 예측
let sum = bridge.reduce((prev,now)=>prev+=now) - bridge[0] + truck_weights[0] ;
//만약 무게보다 작다면 진행해도 된다는 뜻이므로, 진행
if(sum <= weight){
bridge.shift();
bridge.push(truck_weights[0]);
truck_weights.shift();
time++;
}else{
bridge.push(0);
bridge.shift();
time++;
}
}
return time + bridge.length
}
다음 시간의 다리의 무게를 예측하기가 조금 어려웠다. while문을 쓸때에는 다음번의 경우를 고려해야하는 경우가 있으므로 조심하자!