function solution(bridge_length, weight, truck_weights) {
let second = 0;
//다리 위를 지나는 중인 트럭의 현황을 나타내는 배열
let OnBridge = Array.from({length: bridge_length}, () => 0);
while(OnBridge.length > 0) {
//1초마다 움직이니까
//맨 앞에꺼 빠지고 시간증가
OnBridge.shift();
second++;
//추가하는건 대기 목록이 있을 때만 동작
if(truck_weights.length > 0){
//진입할 차례인 트럭의 무게
let firstTruckWeight = truck_weights[0];
/*let firstTruckWeight = truck_weights.shift();
를 하면 트럭이 진입을 못 할 경우 대기목록이 유지되어야 하는데 그거랑 상관없이 계속 shift()를 해서 안됨*/
//현재 다리를 건너는 트럭들 무게의 합
let sumWeight = OnBridge.reduce((acc, cur, idx) => { return acc += cur; }, 0);
//현재 다리를 건너는 트럭의 총 무게와 진입할 차례의 트럭의 무게를 더한게
//다리가 견딜 수 있는 무게보다 작거나 같다면
//다리 위로 진입한다(push함)
if((sumWeight + firstTruckWeight) <= weight) {
OnBridge.push(truck_weights.shift());
//아니면 진입을 못하니 0을 push
//대기 트럭이 있는데 OnBridge가 []이 되면 While문을 탈출해버리니까 push(0)해줘서 []이 되지않도록 함
} else {
OnBridge.push(0);
}
}
}
return second;
}