BOJ-2178

2022년 7월 26일

포인트

  • bfs 문제
  • 이전 노드에서 1씩 추가해서 다음 노드에 넣어주는게 핵심. 결국 해당 노드에 있는 숫자가 그 노드에 방문하기 위한 비용임.
const fs = require("fs");
const [info, ...miro] = fs
  .readFileSync("/dev/stdin")
  .toString()
  .trim()
  .split("\n");

const miroArr = miro.map((m) => m.split("").map((v) => Number(v)));
const [n, m] = info.split(" ").map((v) => Number(v));

const check = Array.from({ length: n }, () => Array(m).fill(0));

const bfs = (startX, startY) => {
  const queue = [];

  const move = [
    [1, 0],
    [0, 1],
    [-1, 0],
    [0, -1],
  ];

  queue.push([startX, startY]);
  check[startX][startY] = 1;

  while (queue.length) {
    const [x, y] = queue.shift();

    for (let i = 0; i < move.length; i++) {
      const nextX = x + move[i][0];
      const nextY = y + move[i][1];

      if (
        0 <= nextX &&
        nextX < n &&
        0 <= nextY &&
        nextY < m &&
        miroArr[nextX][nextY] === 1 &&
        check[nextX][nextY] === 0
      ) {
        check[nextX][nextY] += check[x][y] + 1;
        queue.push([nextX, nextY]);
      }
    }
  }
};

bfs(0, 0);

console.log(check[n - 1][m - 1]);