오늘 푼 문제
2. 다리를 지나는 트럭 / Lv.2 / 시간 : 38분
programmers.co.kr/learn/courses/30/lessons/42583?language=javascript
1차
function solution(bridge_length, weight, truck_weights) {
var answer = 0;
let currentWeight = 0;
let onBridge = [];
while(true){
answer++;
onBridge.forEach(ob=>{ob.pos++});
if(onBridge.length && onBridge[0].pos>bridge_length){
let finished = onBridge.shift();
currentWeight-=finished.weight;
}
let target = truck_weights[0];
if(currentWeight+target<=weight){
onBridge.push({weight : truck_weights.shift(), pos : 1})
currentWeight+=target;
}
if(!truck_weights.length && !onBridge.length) break;
}
return answer;
}
2차 (중복되는 조건 분기와 무의미한 반복을 줄임)
function solution(bridge_length, weight, truck_weights) {
var answer = 1;
let currentWeight = 0;
let onBridge = [];
while(truck_weights.length || onBridge.length){
let target = truck_weights[0];
if(currentWeight+target<=weight){
answer++;
onBridge.forEach(ob=>{ob.pos++});
onBridge.push({weight : truck_weights.shift(), pos : 1})
currentWeight+=target;
}else{
let jump = bridge_length - onBridge[0].pos;
answer+=jump;
onBridge.forEach(ob=>{ob.pos+=jump});
}
if(onBridge[0].pos===bridge_length){
let finished = onBridge.shift();
currentWeight-=finished.weight;
}
}
return answer;
}
1,2차 시간 비교 결과 : 다리의 길이가 길어져도 1ms대에서 처리 가능해짐
'알고리즘 문제풀이' 카테고리의 다른 글
[프로그래머스] 고득점 키트 - 힙1 (0) | 2020.11.06 |
---|---|
[프로그래머스] 고득점 키트 - 스택/큐3 (0) | 2020.11.04 |
[프로그래머스] 고득점 키트 - 스택/큐1 (0) | 2020.10.27 |
[프로그래머스] 고득점 키트 - 해시2 (0) | 2020.10.22 |
[프로그래머스] 고득점 키트 - 해시1 (0) | 2020.10.12 |