
https://programmers.co.kr/learn/courses/30/lessons/42583?language=javascript
다리를 지나려고 기다리고 있는 트럭이 여러대 있다.
그 트럭의 무게는 전부 다른데 다리의 길이와 버틸 수 있는 무게는 한정돼 있다.
이 때 다리가 버틸 수 있는 무게, 길이를 초과하지 않으면서 트럭이 지나갈 때의 시간을 구하는 문제다.
입력: [ bridge_length, weight, truck_weights ]
- bridge_length: 1 이상 10,000 이하의 자연수
 - weight: 1 이상 10,000 이하의 자연수
 - truck_weights: 1 이상 10,000 이하의 배열길이
 
- 각 요소(트럭)는 1이상 weight 이하의 자연수의 무게를 가짐
 
출력: 소요되는 시간을 출력
큐를 쓰면 간단하게 풀 수 있는 문제다.
문제를 봤을 때 어떻게 구현해야 할지는 대충 감이 왔다.
근데 대충 감만 와서 푸는데 시간이 꽤 걸렸다.
처음에는 이렇게 생각했다.
근데 어떻게 구현하면 좋을지 모르겠어서 트럭이 지나가는 모습을 상상했다.
다리길이는 총 4, 버틸 수 있는 무게도 4이고, 트럭은 무게1이 4대가 있는 모습을 상상하면 이렇다.
트럭의 진행방향은 ⬅️ 이쪽이다.
0: 0 0 0 0
1: 0 0 0 1
2: 0 0 1 1
3: 0 1 1 1
4: 1 1 1 1
5: 1 1 1 0
6: 1 1 0 0
7: 1 0 0 0
8: 0 0 0 0
이제 순서를 보면 이렇다.
이제 이걸 코드로 옮기기만 하면 된다.
function solution(bridge_length, maxWeight, weights) {
    const onBridge = Array(bridge_length).fill(0);
    let totWeight = 0;
    let time = 0;
	
  	// 다리위에 트럭이 있거나 대기줄이 존재한다면 while문을 실행한다.
    while(totWeight > 0 || weights.length > 0) {
        totWeight -= onBridge.shift();
        if (totWeight + weights[0] <= maxWeight){
            onBridge.push(weights[0]);
            totWeight += weights.shift();
        }else {
            onBridge.push(0);
        }
        time++;
    } 
    return time;
}
앞으로 얼마나 실력이 향상됐는지 파악하고싶어서 소요시간도 같이 적어줄 생각이다.
이번 문제는 2시간이 소요됐다.