๐ŸŽฒ ๋ฐฑ์ค€ 1012๋ฒˆ ์œ ๊ธฐ๋† ๋ฐฐ์ถ”

Jeongeunยท2023๋…„ 5์›” 22์ผ
0

๋ฐฑ์ค€

๋ชฉ๋ก ๋ณด๊ธฐ
64/185

๋ฐฑ์ค€ 1012๋ฒˆ

์ฝ”๋“œ

๐Ÿงธ ์–ด์ œ ํ’€์—ˆ๋˜ ๋ฌธ์ œ๋ž‘ ๊ฑฐ์˜ ๋˜‘๊ฐ™์•„์„œ ํ˜ผ์ž์„œ ํ’€ ์ˆ˜ ์žˆ์—ˆ๋‹ค! ๊ทธ๋ž˜๋„ ๋ฌธ์ œ ํ‘ธ๋Š” ์‹œ๊ฐ„์„ ์ค„์—ฌ์•ผํ•  ๊ฒƒ ๊ฐ™๋‹ค.

const fs = require('fs'); 
const input = fs.readFileSync('/dev/stdin').toString().trim().split('\n');

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

const num = +input.shift();
for (let i = 0; i < num; i++) {
  let block = 0;
  let willChecked = [];
  const [X, Y, K] = input.shift().split(" ").map(Number);
  let checked = Array.from(new Array(Y), () => new Array(X).fill(0));
  let arr = Array.from(new Array(Y), () => new Array(X).fill(0));
  for (let k = 0; k < K; k++) {
    const [x, y] = input.shift().split(" ").map(Number);
    arr[y][x] = 1;
  }

  for (let y = 0; y < Y; y++) {
    for (let x = 0; x < X; x++) {
      if (arr[y][x] === 1 && checked[y][x] !== 1) {
        //--- BFS
        willChecked.push([y, x]);
        while (willChecked.length) {
          const [pointY, pointX] = willChecked.shift();
          if (checked[pointY][pointX] === 0) {
            checked[pointY][pointX] = 1;
            for (let i = 0; i < 4; i++) {
              nextY = pointY + dir[i][0];
              nextX = pointX + dir[i][1];
              if (
                nextX >= 0 &&
                nextY >= 0 &&
                nextX < X &&
                nextY < Y &&
                arr[nextY][nextX] === 1
              ) {
                willChecked.push([nextY, nextX]);
              }
            }
          }
        }
        // BFS ---
        block++;
      }
    }
  }
  console.log(block);
}

0๊ฐœ์˜ ๋Œ“๊ธ€