function solution(bridge_length, weight, truck_weights) {
let tick = 0;
let currentBridgeWeight = 0;
const waitingTrucks = [...truck_weights];
const passingTrucks = [];
const passedTrucks = [];
while (passedTrucks.length !== truck_weights.length) {
tick += 1; // 1초 경과
// 현재 경과된 시간과 트럭이 진입한 시간차가 다리 길이 만큼이면 첫번째 passingTruck을 옮겨줌.
if (
passingTrucks.length > 0 &&
tick - passingTrucks[0].tick === bridge_length
) {
const { truck: passedTruck } = passingTrucks.shift();
currentBridgeWeight -= passedTruck;
passedTrucks.push(passedTruck);
}
// 다리에 진입하기 위한 무게 체크
if (
waitingTrucks.length > 0 &&
currentBridgeWeight + waitingTrucks[0] <= weight
) {
const truck = waitingTrucks.shift();
currentBridgeWeight += truck;
passingTrucks.push({ truck, tick }); // 견딜 수 있는 무게면 truck숫자와 언제 다리에 진입했는지 저장
}
// else { // 다리에 더이상 진입하지 못하면 첫번째 passing중인 트럭을 마지막으로.
// tick += bridge_length - tick - passingTrucks[0].tick - 1;
// }
}
return tick;
}
[프로그래머스]다리를 지나는 트럭
2022년 7월 12일