๐งธ ์ฒ์์ 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);