๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๊ฐœ์ธ๊ณต๋ถ€/Algorithm

[๋ฐฑ์ค€][Node.js] 2667๋ฒˆ : ๋‹จ์ง€๋ฒˆํ˜ธ๋ถ™์ด๊ธฐ

by ๐Ÿ‡๋ฐ•๋ด‰๋ด‰๐Ÿ‡ 2021. 9. 5.

 

 

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"));
};

 

 

 

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€