Lv2. 다리를 지나는 트럭 Javascript
https://programmers.co.kr/learn/courses/30/lessons/42583
function solution(bridge_length, weight, truck_weights) {
if (truck_weights.length == 1) {
return bridge_length + 1;
}
let second = 0;
let bridge = new Array(bridge_length).fill(0);
while (bridge.length) {
second++;
bridge.shift();
if (truck_weights.length) {
const sumOfBridge = bridge.reduce((acc, val) => acc + val, 0);
if (sumOfBridge + truck_weights[0] <= weight) {
bridge.push(truck_weights.shift());
} else {
bridge.push(0);
}
}
}
return second;
}
function solution(bridge_length, weight, truck_weights) {
// 트럭이 1대 일 경우
if (truck_weights.length == 1) {
return bridge_length + 1;
}
//
let second = 0;
// 0으로 채운 다리 길이의 배열 생성
let bridge = new Array(bridge_length).fill(0);
while (bridge.length) {
second++;
bridge.shift(); // bridge 맨 앞 트럭을 제거
if (truck_weights.length) {
// 건너지 않은 트럭이 남아 있을 경우
const sumOfBridge = bridge.reduce((acc, val) => acc + val, 0);
// reduce를 활용해서 다리 위의 트럭 무게 합을 구함
if (sumOfBridge + truck_weights[0] <= weight) {
// 다리 위 트럭의 무게 + 건너지 않은 트럭 대기열의 첫번쨰 트럭 무게
// 위 무게가 다리가 버틸수 있는 무게보다 작거나 같으면
bridge.push(truck_weights.shift());
// 대기열 첫번째 트럭을 shift한 값을 다리위에 push
} else {
// 그렇지 않은 경우 0을 push
bridge.push(0);
}
}
// 트럭이 남아있지 않을 경우 push되는 값은 없고 bridge.length는 줄어듦.
}
return second;
}
많이 돌아갔다가 결국 다시 리팩토링.
array를 만든다고 공간 복잡도 문제를 너무 심각하게 받아들이지 않도록 해야겠다.
결국은 시간 복잡도가 문제.
댓글 환영
질문 환영
by.protect-me