[백준13335_자바스크립트(javascript)] - 트럭

경이·2024년 5월 31일

𝑩𝑶𝑱 (𝒋𝒔)

목록 보기
47/325

🔴 문제

트럭


🟡 Sol

const fs = require('fs');
const path = process.platform === 'linux' ? '/dev/stdin' : 'Wiki\\input.txt';
const [NWL, trucks] = fs
  .readFileSync(path)
  .toString()
  .trim()
  .split('\n')
  .map((it) => it.split(' '))
  .map((it) => it.map((it) => Number(it)));

// n : 개수
// w : 다리 길이
// l : 하중
const [n, w, l] = NWL;

const bridge = new Array(w).fill(0);
let time = 0;

function canTruckMove(targetTruckWeight) {
  const currentWeight = bridge.reduce((pre, cur) => pre + cur);

  return currentWeight + targetTruckWeight - bridge[0] <= l;
}

while (trucks.length) {
  const targetTruck = trucks[0];

  if (canTruckMove(targetTruck)) {
    bridge.shift();
    bridge.push(trucks.shift());
  } else {
    bridge.shift();
    bridge.push(0);
  }

  time++;
}

while (bridge.reduce((pre, cur) => pre + cur)) {
  bridge.shift();
  bridge.push(0);
  time++;
}
console.log(time);

🟢 풀이

구현/시물레이션 문제유형이다.
차근차근 문제에서 요구하는 대로 코드를 구현하면 되는데....

나같은 경우 트럭이 다리에 진입할 수 있는지 없는지를 판단해주는 canTruckMove 함수를 구현해줬다.
만약 트럭이 다리에 진입할 수 있다면 진입한 트럭을 입력받은 trucks 배열에서 제거해줬는데 트럭이 다리에 모두 진입해 트럭의 길이가 0이 된다면 무한반복을 종료하도록 구현했다.

하지만 가장 마지막에 다리에 진입한 트럭은 다리를 모두 건너지 않았기에 마지막에 while문을 추가하여 모든 트럭이 다리를 건넌 뒤의 시간을 출력해줬다.


🔵 Ref

profile
록타르오가르

0개의 댓글