[프로그래머스]스택/큐 - 다리를 지나는 트럭

·2021년 10월 2일
0

코테문제풀기

목록 보기
10/57

문제확인

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

문제풀이

function solution(bridge_length, weight, truck_weights) {
    let second = 0;
    //다리 위를 지나는 중인 트럭의 현황을 나타내는 배열
    let OnBridge = Array.from({length: bridge_length}, () => 0);

    while(OnBridge.length > 0) {
        //1초마다 움직이니까
        //맨 앞에꺼 빠지고 시간증가
        OnBridge.shift();
        second++;
        
        //추가하는건 대기 목록이 있을 때만 동작
        if(truck_weights.length > 0){
            //진입할 차례인 트럭의 무게
            let firstTruckWeight = truck_weights[0];
            /*let firstTruckWeight = truck_weights.shift();
            를 하면 트럭이 진입을 못 할 경우 대기목록이 유지되어야 하는데 그거랑 상관없이 계속 shift()를 해서 안됨*/
            
            //현재 다리를 건너는 트럭들 무게의 합
            let sumWeight = OnBridge.reduce((acc, cur, idx) => { return acc += cur; }, 0);

            //현재 다리를 건너는 트럭의 총 무게와 진입할 차례의 트럭의 무게를 더한게
            //다리가 견딜 수 있는 무게보다 작거나 같다면
            //다리 위로 진입한다(push함)
            if((sumWeight + firstTruckWeight) <= weight) {
                OnBridge.push(truck_weights.shift());
            //아니면 진입을 못하니 0을 push
            //대기 트럭이 있는데 OnBridge가 []이 되면 While문을 탈출해버리니까 push(0)해줘서 []이 되지않도록 함
            } else {
                OnBridge.push(0);
            }
        }
    }
    return second;
}

0개의 댓글