문제
제한 사항
입출력 예
풀이
function solution(bridge_length, weight, truck_weights) {
const bridge = new Array(bridge_length).fill(0);
let time = 0;
while (bridge.length) {
bridge.shift();
time++;
if (truck_weights.length) {
let sum = bridge.reduce((a, c) => a + c, 0);
if (sum + truck_weights[0] <= weight) {
bridge.push(truck_weights.shift());
} else {
bridge.push(0);
}
}
}
return time;
}
- 큐(배열)를 다리처럼 사용했다. 다리에 올라갈 수 있는 수의 개수만큼 0을 넣는다.
- 반복문에서 shift()처리로 한 칸씩 이동하는 것을 구현한다. 이때 시간이 증가한다.
- 다리 위 트럭의 합계를 구하고 트럭 무게의 첫번째 요소와 더한 뒤 다리가 견디는 최대무게(weight)와 비교한다.
- 다리에 트럭이 올라 갈 수 있는 조건이 되면 다리 위로 트럭을 올리고 그렇지 않으면 0을(트럭이 올라가지 않은 것) 올린다.
- time은 매 반복이 돌 때마다 올라가줘야해서 0을 올리는 것이다.