PS/Programmers

Programmers / Level 2 / 다리를 지나는 트럭 / JS

KimMinJun 2022. 12. 27. 16:57

< 문제 바로가기 >

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

// bridge_length: 다리에 올라갈 수 있는 최대 트럭의 개수
// weight: 다리가 견딜 수 있는 무게
// truck_weights: 트럭 별 무게
function solution(bridge_length, weight, truck_weights) {
  let answer = 0;
  // 다리 상황
  let bridge = Array.from({ length: bridge_length }, () => 0);
  let sum = 0;
  let nextTruckWeight = truck_weights.shift();
  
  answer += 1;
  // 다리에 올라간 트럭 무게 합
  sum = nextTruckWeight;
  // 새로운 트럭을 다리에 올림
  bridge.push(nextTruckWeight);
  // 맨 앞 빼줌
  bridge.shift();

  while(sum) {
      answer += 1;
      
      sum -= bridge.shift();
      
      if(sum + truck_weights[0] <= weight) {
          nextTruckWeight = truck_weights.shift();
          sum += nextTruckWeight;
          bridge.push(nextTruckWeight);
      }
      else bridge.push(0);
  }
  
  return answer;
}

큐를 다리의 현재 상황으로 생각하면서 풀면 연상이 잘되고, 쉽다.

트럭은 오른쪽에서 들어오고, 트럭이 없는 자리는 0으로 채워주면 된다.

 

그리고 시간이 지날때마다 큐의 맨 앞에서 하나씩 빼주면 된다.

 

만약 다리 위에 있는 트럭의 무게의 총합과 들어와야 할 트럭의 무게의 합이 가용 무게를 넘지 않을 경우에는 무게 총합에 더해주고, 그렇지 않을 경우에는 큐에 0을 push 해주기만 하면 된다.