๊ฐ์ธ๊ณต๋ถ/Algorithm
[๋ฐฑ์ค][Node.js] 2667๋ฒ : ๋จ์ง๋ฒํธ๋ถ์ด๊ธฐ
๐๋ฐ๋ด๋ด๐
2021. 9. 5. 23:22
Algorithm
- ๋จ์ง๋ฒํธ๋ถ์ด๊ธฐ -
๋ฌธ์
<๊ทธ๋ฆผ 1>๊ณผ ๊ฐ์ด ์ ์ฌ๊ฐํ ๋ชจ์์ ์ง๋๊ฐ ์๋ค. 1์ ์ง์ด ์๋ ๊ณณ์, 0์ ์ง์ด ์๋ ๊ณณ์ ๋ํ๋ธ๋ค. ์ฒ ์๋ ์ด ์ง๋๋ฅผ ๊ฐ์ง๊ณ ์ฐ๊ฒฐ๋ ์ง์ ๋ชจ์์ธ ๋จ์ง๋ฅผ ์ ์ํ๊ณ , ๋จ์ง์ ๋ฒํธ๋ฅผ ๋ถ์ด๋ ค ํ๋ค. ์ฌ๊ธฐ์ ์ฐ๊ฒฐ๋์๋ค๋ ๊ฒ์ ์ด๋ค ์ง์ด ์ข์ฐ, ํน์ ์๋์๋ก ๋ค๋ฅธ ์ง์ด ์๋ ๊ฒฝ์ฐ๋ฅผ ๋งํ๋ค. ๋๊ฐ์ ์์ ์ง์ด ์๋ ๊ฒฝ์ฐ๋ ์ฐ๊ฒฐ๋ ๊ฒ์ด ์๋๋ค. <๊ทธ๋ฆผ 2>๋ <๊ทธ๋ฆผ 1>์ ๋จ์ง๋ณ๋ก ๋ฒํธ๋ฅผ ๋ถ์ธ ๊ฒ์ด๋ค. ์ง๋๋ฅผ ์ ๋ ฅํ์ฌ ๋จ์ง์๋ฅผ ์ถ๋ ฅํ๊ณ , ๊ฐ ๋จ์ง์ ์ํ๋ ์ง์ ์๋ฅผ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ์ฌ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ์ถ๋ ฅ ์์
๋ฌธ์ ํ๊ธฐ
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
let input = [];
rl.on("line", function (line) {
input.push(line.toString());
}).on("close", function () {
input.shift();
solution();
process.exit();
});
let solution = () => {
let graph = input.map((el) => el.split("").map((el) => Number(el)));
let visited = Array.from(Array(input.length), () =>
Array(input.length).fill(false)
);
let BFS = (y, x) => {
let cnt = 1;
let queue = [];
let mx = [0, 0, -1, 1];
let my = [1, -1, 0, 0];
visited[y][x] = true;
queue.push([x, y]);
while (queue.length) {
let [nx, ny] = queue.shift();
for (let i = 0; i < 4; i++) {
let xx = mx[i] + nx;
let yy = my[i] + ny;
if (0 <= xx && xx < input.length && 0 <= yy && yy < input.length) {
if (graph[yy][xx] === 1 && visited[yy][xx] === false) {
visited[yy][xx] = true;
queue.push([xx, yy]);
cnt++;
}
}
}
}
return cnt;
};
let answer = [];
let count = 0;
for (let i = 0; i < input.length; i++) {
for (let j = 0; j < input.length; j++) {
if (graph[i][j] === 1 && visited[i][j] === false) {
answer.push(BFS(i, j));
count++;
}
}
}
answer.sort((a, b) => a - b);
console.log(count);
console.log(answer.join("\n"));
};
๋ฐ์ํ