본문 바로가기

프로그래머스

6/15[문제풀이] 프로그래머스 Lv2 다리를 지나는 트럭

출처 : https://programmers.co.kr/learn/courses/30/lessons/42583

[문제풀이]

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
function solution(bridge_length, weight, truck_weights) {
    
    let onBridge = new Array(bridge_length - 1).fill(0);
 
    onBridge.push(truck_weights.shift());
 
    let count = 1;
    
    while (onBridge.reduce((a, b) => a + b) > 0) {
        
        onBridge.shift();
           
        if (weight - onBridge.reduce((a, b) => a + b) >= truck_weights[0]) {
            
            onBridge.push(truck_weights.shift());
            
        } else {
            
            onBridge.push(0);
            
        }
        
        count++;
        
    }
    
    return count;
    
}
cs

 

문제의 입출력 예시만 보고 이해를 한동안 못하고 있다가 문제를 다시 읽고 손으로 경우의 수를 헤아려서 문제를 이해했다. onBridge라는 배열에 0을 채워서 선언하고 마지막 요소에 첫 트럭을 우선 넣는다. 다리에 트럭이 아예 없을 때까지 while을 돌려주고 다리 제일 앞에 있는 요소를 보내고 버틸 수 있는 다리 무게(weight) 다음 truck_weights 보다 높은지 비교한다. 만약 버틸 수 있다면 onBridge 요소에 트럭을 넣고 count를 더하고 그러지 못할 경우 0을 넣고 count를 더하는 식으로 구현했다.