개발 블로그

[프로그래머스/Javascript/Queue] 다리를 지나는 트럭 본문

IT/Programmers

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

파티에 2021. 4. 5. 23:00

1. 서론
 위 문제는 스택 / 큐로 분류로 분류되어 있으며, 큐를 이용해 문제를 풀었다.

2. 문제설명(출처: programmers.co.kr/learn/courses/30/lessons/42583)

다리를 지나는 트럭들

3. 문제풀이
 1) 문제에서 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 라고 하였으니 트럭이 다리에 올라갔을 때, 트럭을 queue에 넣고 트럭이 지나갔다면 queue에서 빼는 방식을 사용한다.
 2) 우선 현재 다리에 트럭이 있는지 확인한다. 다리에 트럭이 있다면 트럭이 다리를 얼마나 지났는지 확인한다. 만약 다리를 모두 건넜다면, 다리에 걸리는 하중에서 해당 트럭의 무게를 빼준다.
 3) 현재 다리 위에 있는 모든 트럭의 시간을 +1 해준다.
 4) 현재 다리 위에 걸린 하중 + 새로운 트럭의 무게를 다리가 견딜 수 있다면 하중에 새로운 트럭의 무게를 더해준다.
 5) 위의 과정을 모든 트럭이 건널때까지 반복한다.

4. 결과 코드

function solution(bridge_length, weight, truck_weights) {
  var answer = 0;

  var num_trucks = truck_weights.length;
  var on_board = []
  var passed = []
  var sum = 0;
  while(num_trucks > passed.length){
    if(on_board.length){
      if(on_board[0][1] >= bridge_length){
        sum -= on_board[0][0]
        passed.push(on_board.shift()[0])
      }
      for(let truck of on_board){
        truck[1] += 1
      }
    }
    if(sum + truck_weights[0] <= weight){
      sum += truck_weights[0]
      on_board.push([truck_weights.shift(), 1])
    }
    answer++;
  }
  return answer;
}