프로그래머스[Level 2] 다리를 지나는 트럭 (스택/큐)

bkboy·2022년 6월 14일
0

문제

제한 사항

입출력 예

풀이

function solution(bridge_length, weight, truck_weights) {
  const bridge = new Array(bridge_length).fill(0); // 0으로 초기화 된 배열

  let time = 0;
  while (bridge.length) {
    bridge.shift(); // 다리 위 트럭이 한칸 씩 이동
    time++;

    if (truck_weights.length) {
      let sum = bridge.reduce((a, c) => a + c, 0); // 현재 다리위 트럭 무게의 합계

      if (sum + truck_weights[0] <= weight) {
        // 다리에 트럭이 올라갈 수 있는 지 확인
        bridge.push(truck_weights.shift()); // 가능하면 트럭을 다리위로 올림
      } else {
        bridge.push(0); // 불가능하면 0을 올림(트럭을 올리지 않고 시간이 지나는 것)
      }
    }
  }
  return time;
}
  • 큐(배열)를 다리처럼 사용했다. 다리에 올라갈 수 있는 수의 개수만큼 0을 넣는다.
  • 반복문에서 shift()처리로 한 칸씩 이동하는 것을 구현한다. 이때 시간이 증가한다.
  • 다리 위 트럭의 합계를 구하고 트럭 무게의 첫번째 요소와 더한 뒤 다리가 견디는 최대무게(weight)와 비교한다.
  • 다리에 트럭이 올라 갈 수 있는 조건이 되면 다리 위로 트럭을 올리고 그렇지 않으면 0을(트럭이 올라가지 않은 것) 올린다.
  • time은 매 반복이 돌 때마다 올라가줘야해서 0을 올리는 것이다.
profile
음악하는 개발자

0개의 댓글