Lv 2. 다리를 지나는 트럭

박하린·2021년 6월 20일
0

프로그래머스

목록 보기
34/42

📚 문제

스택/큐 - 다리를 지나는 트럭
https://programmers.co.kr/learn/courses/30/lessons/42583

💡 접근

  1. 큐를 다리라고 생각하고 다리 길이만큼 0으로 채워준다.
  2. 다리위에 먼저 올라간 트럭이 먼저 다리를 지나서 나와야한다.
  3. 매 초마다 bridge에서 맨 앞에 있는 값을 저장해두고 큐에서 빼준다.
  4. 큐에서 뺐으니까 무게 합에서 저장한 무게 값을 빼준다.
    4.1 대기중인 트럭 + 현재 다리에 있는 트럭의 무게 합 > 다리가 견딜 수 있는 무게 이면,
    더이상 다리에 트럭이 올라갈 수 없으므로 큐에 0을 채워준다. (이번 초에는 아무 트럭도 탑승 x)
    4.2 트럭이 더 올라갈 수 있으면 무게합에 트럭무게 더해주고, 큐에서 맨 먼저 들어온 트럭 빼준다.
    4.3 대기중인 트럭이 없을 때까지 반복
  5. 마지막에 다리에 올라간 트럭은 초 계산을 미처 못했으므로 다리길이만큼 +해준다.

⌨️ 코드

function solution(bridge_length, weight, truck_weights) {
    let bridge = [];
    let flag = true;
    let sum = 0;
    let answer = 0;

    //
    for (let i = 0; i < bridge_length; i++){
        bridge.push(0);
    }

    while (flag){
        // shift 한 값 기억
        let shiftVal = bridge.shift();
        
        // shift했으니까 weight를 재기위한 sum에서 빼준다.
        sum -= shiftVal;

        if (sum + truck_weights[0] > weight){
            bridge.push(0);
        }
        else {
            sum += truck_weights[0]
            bridge.push(truck_weights[0]);
            truck_weights.shift();
        }
        answer++;

        if (truck_weights.length == 0){
            for (let i = 0; i < bridge_length; i++){
                answer++;
            }
        flag = false;
        }
    }

    return answer;
}

📝 리뷰

큐 FIFO

profile
깃허브: https://github.com/khakaa

0개의 댓글

관련 채용 정보