function solution(bridge_length, weight, truck_weights) {
let time = 0;
let que = [];
let queueSum = 0;
for (let i = 0; i < bridge_length; i++) {
que.push(0);
}
let now_truck = truck_weights.shift();
que.unshift(now_truck);
que.pop();
queueSum += now_truck;
time++;
while (queueSum) {
queueSum -= que.pop();
now_truck = truck_weights.shift();
if (now_truck + queueSum <= weight) {
que.unshift(now_truck);
queueSum += now_truck;
} else {
que.unshift(0);
truck_weights.unshift(now_truck);
}
time++;
}
return time;
}
이런식의 큐 문제는 상당히 많다.
이런 문제를 풀때에는 일단 기본적으로
처음에 기초설정을 할지 vs 아니면 처음부터 바로 반복문을 돌릴지를 선택해야 한다.
queueSum 은 다리에 있는 트럭의 총 무게를 종합하고 있고
나머지 변수들도 이름에 맞는 역할을 하고 있다.
일단 기본적으로 que를 다리로 명시적으로 보이게 하기 위해서 0을 넣어주었다.
그후 처음 트럭을 다리위에 올려놓고 시간을 1더해주었다.
그후 while문을 돌렸다.
일단 다음에 올라갈 트럭을 뺴온다.
뺴온뒤에 현재 다리위에 있는 무게와 뺴온 트럭의 무게를 합쳐보고 괜찮으면 다리에 올리고 아니면 다시 대기하는 의미에서 트럭 배열에 집어넣는다.
이 문제의 핵심을 흐름을 파악하는 것이다.
이런 종류의 큐 문제들이 모두 그렇다.
천천히 어떻게 진행이 되어야 하는지를 인식한다면 쉽게 해결할수 있는 문제라고 생각한다.