본문 바로가기

Algorithm/문제풀이

Programmers - 다리를 지나는 트럭 / Javascript

function solution(bridge_length, weight, truck_weights) {
    //첫번째로 건널 트럭을 truck_weights배열에서 뽑아줌
    const firstTruck = truck_weights.shift();
    
    //다리의 길이 - 1만큼 다리 배열을 만들어 준 후,
    let bridge = new Array(bridge_length - 1).fill(0);
    
    //다리배열의 마지막에는 아까 뽑은 트럭을 마지막에 push해줌
    bridge.push(firstTruck);

    //현재 다리의 무게
    let bridgeWeight = firstTruck;
    
    //시간
    let time = 1;

    //다리의 무게가 0이 되면 모든 트럭이 건넜다고 봄
    while(bridgeWeight) {
    
        //다리배열의 첫번째 요소를 뽑아 현재 다리 무게에서 빼준다.
        bridgeWeight = bridgeWeight - bridge.shift();
        
        //다음으로 올릴 트럭의 무게
        const nextTruckWeight = truck_weights[0];
        
        //만약 현재 다리 무게 + 다음으로 올릴 트럭의 무게 <= 다리가 버틸수 있는 무게인 경우
        if(bridgeWeight + nextTruckWeight <= weight) {
        
            //다리배열의 마지막에 다음 트럭을 올려준다.
            bridge.push(nextTruckWeight);
            
            //truck_weights배열에서는 위에 올린 트럭을 제거해줌
            truck_weights.shift();
            
            //현재 다리 무게 = 기존 다리무게 + 다음 트럭 무게로 다시 계산
            bridgeWeight = bridgeWeight + nextTruckWeight;
            
        } else {
        
            //위의 조건에 충족하지 못할 경우 while문 초반에 shift()로 맨 앞 요소를 제거해주었으니 마지막에 push(0)를 해줌
            bridge.push(0);
            
        }
        
        //마지막으로 시간 증가
        time++;
    }
    
    return time;
}