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시간이 소요됐다.