본문 바로가기
PS(Javascript)

[프로그래머스] Lv2 다리를 지나는 트럭

by 같이긍뱅와 2023. 7. 13.

문제

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

풀이

  1. 먼저 배열을 초기화하고 트럭을 한대 다리 위에 올린 상태에서 시작한다. bridge_length만큼 0이 채워진 큐는 트럭이 하나도 올라가 있지 않은 상태라고 할 수 있다.
     var answer = 0;
     const bridge = Array(bridge_length).fill(0);
     let bridge_sum = truck_weights[0];
     answer++;
     bridge.shift();
     bridge.push(truck_weights.shift());
  2. bridge_sum은 현재 다리 위에 올려져 있는 트럭 무게의 합이다. 따라서 bridge_sum이 0보다 클 때까지 즉 트럭이 다리위에 있을 동안 계속 while문을 돌면서 시간을 세준다. 트럭 하나가 다리를 빠져나올 때마다 빠져나온 트럭의 무게를 빼주고 truck_weights 맨 앞의 트럭의 무게와 현재 다리위 트럭의 합이 weight보다 작다면 맨 앞의 트럭을 배열에서 빼준다 그렇지 않다면 0을 배열에 push 해주는데 그 이유는 새로운 트럭이 들어오진 않지만 한 칸씩 전진하는 것을 나타낸 것이다.
    while(bridge_sum > 0) {
        answer++;
        bridge_sum -= bridge.shift();
        if(truck_weights.length > 0 && bridge_sum + truck_weights[0] <= weight) {
            bridge_sum += truck_weights[0];
            bridge.push(truck_weights.shift());
        } else {
            bridge.push(0);
        }
    }
  3. answer를 리턴해준다.

코드

function solution(bridge_length, weight, truck_weights) {
    var answer = 0;
    const bridge = Array(bridge_length).fill(0);

    let bridge_sum = 0;
    answer++;
    bridge.shift();
    bridge_sum += truck_weights[0];
    bridge.push(truck_weights.shift());
    while(bridge_sum > 0) {
        answer++;
        bridge_sum -= bridge.shift();
        if(truck_weights.length > 0 && bridge_sum + truck_weights[0] <= weight) {
            bridge_sum += truck_weights[0];
            bridge.push(truck_weights.shift());
        } else {
            bridge.push(0);
        }
    }
    return answer;
}

댓글