๐ŸŽฒ ๋ฐฑ์ค€ 10026๋ฒˆ ์ ๋ก์ƒ‰์•ฝ

Jeongeunยท2023๋…„ 8์›” 2์ผ
0

๋ฐฑ์ค€

๋ชฉ๋ก ๋ณด๊ธฐ
104/187

10026๋ฒˆ

๐Ÿงธ ์ฒ˜์Œ์— BFS์•ˆ์—์„œ ๊ฒฝ์šฐ๋ฅผ ๋‚˜๋ˆ„์–ด์ฃผ๋ ค๊ณ  ํ–ˆ๋Š”๋ฐ ์‹คํŒจํ–ˆ๋‹ค.. ๊ฐ™์ด ํ’€๋˜ ์นœ๊ตฌ๊ฐ€ ๋งํ•œ ๋ฐฉ๋ฒ•๋Œ€๋กœ ํ•˜๋‹ˆ๊นŒ ์„ฑ๊ณต~~!
๐Ÿ’ก ์ ๋ก์ƒ‰์•ฝ์ธ ๊ฒฝ์šฐ์˜ ๋ฐฐ์—ด์„ ๋”ฐ๋กœ ์ถ”๊ฐ€ํ•ด์ฃผ์—ˆ๋‹ค.

์ฝ”๋“œ

const fs = require('fs'); 
let input = fs.readFileSync('/dev/stdin').toString().trim().split('\n');
const N = +input.shift();
input = input.map((item) => item.split(""));
const inputYes = input.map((line) =>
  line.map((item) => (item = item === "G" ? "R" : item))
);

const checked = Array.from(new Array(N), () => new Array(N).fill(0));
const checkedYes = Array.from(new Array(N), () => new Array(N).fill(0));

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

const BFS = (input, i, j, checked) => {
  const queue = [[i, j]];
  while (queue.length) {
    const [pY, pX] = queue.shift();
    for (let d = 0; d < 4; d++) {
      const nY = pY + dir[d][0];
      const nX = pX + dir[d][1];
      if (nX >= 0 && nY >= 0 && nX < N && nY < N && checked[nY][nX] === 0) {
        if (input[nY][nX] === input[pY][pX]) {
          queue.push([nY, nX]);
          checked[nY][nX] = 1;
        }
      }
    }
  }
};

let no = 0;
let yes = 0;
for (let i = 0; i < N; i++) {
  for (let j = 0; j < N; j++) {
    if (checked[i][j] === 0) {
      BFS(input, i, j, checked);
      no++;
    }
  }
}

for (let i = 0; i < N; i++) {
  for (let j = 0; j < N; j++) {
    if (checkedYes[i][j] === 0) {
      BFS(inputYes, i, j, checkedYes);
      yes++;
    }
  }
}

console.log(no, yes);

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