🔥 Algorithm/Programmers
[프로그래머스] 다리를 지나는 트럭 (js)
Lennon
2022. 2. 10. 12:33
728x90
반응형
https://programmers.co.kr/learn/courses/30/lessons/42583?language=javascript
function solution(bridge_length, weight, truck_weights) {
truck_weights = truck_weights.map((v) => [v, 0]);
const passingTruck = [];
const passedTruck = [];
const len = truck_weights.length;
let count = 1;
while (passedTruck.length !== len) {
count++;
if (truck_weights.length > 0) {
passingTruck.push(truck_weights.shift());
}
const truckWeight = passingTruck.reduce((prev, cur) => prev + cur[0], 0);
if (truckWeight > weight) {
truck_weights.unshift(passingTruck.pop());
}
passingTruck.map((v) => v[1]++);
if (passingTruck[0][1] === bridge_length) {
passedTruck.push(passingTruck.shift());
}
}
return count;
}
truck_weights [7,4,5,6]을 [ [7,0], [4,0], [5,0], [6,0] ] 형태로 바꾼다.
passingTruck
지나가는 트럭을 넣는 배열
passedTruck
트럭이 지나가면 넣는 배열
count
시간을 재는 변수
while 내부 로직
count는 계속 1씩 더해준다.
1. truck_weights 배열의 길이가 0이 아니면 truck_weight 입력 배열에서 shift 하여 passingTruck에 push 한다.
2. passingTruck의 들어가 있는 트럭들의 무게(truckWeight)를 구한다.
3. truckWeight가 weight를 넘으면 passingTruck 배열에서 pop을 하고, 그 값을 다시 truck_weights 배열에 넣는다.
4. passingTruck 배열의 모든 인덱스를 순회하며 [1] 값에 1씩 더한다. ex) [7, 0] => [7, 1]
5. 순서대로 들어오므로 passingTruck[0][1] 값이 bridge_length값이 되면
passingTruck에서 shift 하며 그 값을 passedTruck에 push 한다.
6. passedTruck의 배열 길이가 처음 제공된 truck_weights 길이가 되면 while문을 종료한다.
728x90
반응형