[백준 1012] 유기농 배추 with node.js

waterglasses·2021년 9월 18일
0

📌 문제링크

https://www.acmicpc.net/problem/1012

📌 풀이

  • 배추를 1번 순회하할 때마다 cntOfWorms를 1 증가시키면서 개수를 센다

📌 코드

const fs = require('fs');
const stdin = (
  process.platform === 'linux'
    ? fs.readFileSync('/dev/stdin').toString().trim()
    : `1
5 3 6
0 2
1 2
2 2
3 2
4 2
4 0`
).split('\n');

const input = (() => {
  let line = 0;
  return () => stdin[line++];
})();

const traversalInCabbagesByBFS = (cabbages, startX, startY) => {
  let queue = [[startX, startY]];
  let queueCursor = 0;

  let dx = [0, 0, 1, -1];
  let dy = [1, -1, 0, 0];

  while (queue.length > queueCursor) {
    let [x, y] = queue[queueCursor++];

    for (let i = 0; i < 4; i++) {
      let nx = x + dx[i];
      let ny = y + dy[i];

      if (nx < 0 || nx >= cabbages.length || ny < 0 || ny >= cabbages[0].length) continue;
      if (!cabbages[nx][ny]) continue;

      cabbages[nx][ny] = false;
      queue.push([nx, ny]);
    }
  }
};

const getLeastWorms = (cabbages) => {
  let cntOfWorms = 0;

  for (let i = 0; i < cabbages.length; i++) {
    for (let j = 0; j < cabbages[0].length; j++) {
      if (!cabbages[i][j]) continue;

      cntOfWorms += 1;
      traversalInCabbagesByBFS(cabbages, i, j);
    }
  }

  return cntOfWorms;
};

const T = parseInt(input());
for (let i = 0; i < T; i++) {
  const [M, N, K] = input().split(' ').map(Number);
  const cabbages = Array.from(new Array(M), () => new Array(N).fill(false));

  for (let j = 0; j < K; j++) {
    const [X, Y] = input().split(' ').map(Number);
    cabbages[X][Y] = true;
  }

  console.log(getLeastWorms(cabbages));
}
profile
매 순간 성장하는 개발자가 되려고 노력하고 있습니다.

0개의 댓글