Algorithm
- ์ ๊ธฐ๋ ๋ฐฐ์ถ -
๋ฌธ์
์ฐจ์ธ๋ ์๋์ธ ํ๋๋ ๊ฐ์๋ ๊ณ ๋ญ์ง์์ ์ ๊ธฐ๋ ๋ฐฐ์ถ๋ฅผ ์ฌ๋ฐฐํ๊ธฐ๋ก ํ์๋ค.
๋์ฝ์ ์ฐ์ง ์๊ณ ๋ฐฐ์ถ๋ฅผ ์ฌ๋ฐฐํ๋ ค๋ฉด ๋ฐฐ์ถ๋ฅผ ํด์ถฉ์ผ๋ก๋ถํฐ ๋ณดํธํ๋ ๊ฒ์ด ์ค์ํ๊ธฐ ๋๋ฌธ์, ํ๋๋ ํด์ถฉ ๋ฐฉ์ง์ ํจ๊ณผ์ ์ธ ๋ฐฐ์ถํฐ์ง๋ ์ด๋ฅผ ๊ตฌ์ ํ๊ธฐ๋ก ๊ฒฐ์ฌํ๋ค.
์ด ์ง๋ ์ด๋ ๋ฐฐ์ถ๊ทผ์ฒ์ ์์ํ๋ฉฐ ํด์ถฉ์ ์ก์ ๋จน์์ผ๋ก์จ ๋ฐฐ์ถ๋ฅผ ๋ณดํธํ๋ค.
ํนํ, ์ด๋ค ๋ฐฐ์ถ์ ๋ฐฐ์ถํฐ์ง๋ ์ด๊ฐ ํ ๋ง๋ฆฌ๋ผ๋ ์ด๊ณ ์์ผ๋ฉด ์ด ์ง๋ ์ด๋ ์ธ์ ํ ๋ค๋ฅธ ๋ฐฐ์ถ๋ก ์ด๋ํ ์ ์์ด, ๊ทธ ๋ฐฐ์ถ๋ค ์ญ์ ํด์ถฉ์ผ๋ก๋ถํฐ ๋ณดํธ๋ฐ์ ์ ์๋ค.
(ํ ๋ฐฐ์ถ์ ์ํ์ข์ฐ ๋ค ๋ฐฉํฅ์ ๋ค๋ฅธ ๋ฐฐ์ถ๊ฐ ์์นํ ๊ฒฝ์ฐ์ ์๋ก ์ธ์ ํด์๋ค๊ณ ๊ฐ์ฃผํ๋ค)
ํ๋๊ฐ ๋ฐฐ์ถ๋ฅผ ์ฌ๋ฐฐํ๋ ๋ ์ ๊ณ ๋ฅด์ง ๋ชปํด์ ๋ฐฐ์ถ๋ฅผ ๊ตฐ๋ฐ๊ตฐ๋ฐ ์ฌ์ด๋์๋ค.
๋ฐฐ์ถ๋ค์ด ๋ชจ์ฌ์๋ ๊ณณ์๋ ๋ฐฐ์ถํฐ์ง๋ ์ด๊ฐ ํ ๋ง๋ฆฌ๋ง ์์ผ๋ฉด ๋๋ฏ๋ก ์๋ก ์ธ์ ํด์๋ ๋ฐฐ์ถ๋ค์ด ๋ช ๊ตฐ๋ฐ์ ํผ์ ธ์๋์ง ์กฐ์ฌํ๋ฉด ์ด ๋ช ๋ง๋ฆฌ์ ์ง๋ ์ด๊ฐ ํ์ํ์ง ์ ์ ์๋ค.
์๋ฅผ ๋ค์ด ๋ฐฐ์ถ๋ฐญ์ด ์๋์ ๊ฐ์ด ๊ตฌ์ฑ๋์ด ์์ผ๋ฉด ์ต์ 5๋ง๋ฆฌ์ ๋ฐฐ์ถํฐ์ง๋ ์ด๊ฐ ํ์ํ๋ค.
(0์ ๋ฐฐ์ถ๊ฐ ์ฌ์ด์ ธ ์์ง ์์ ๋ ์ด๊ณ , 1์ ๋ฐฐ์ถ๊ฐ ์ฌ์ด์ ธ ์๋ ๋ ์ ๋ํ๋ธ๋ค.)
์ ์ถ๋ ฅ ์์
๊ฐ ํ ์คํธ ์ผ์ด์ค์ ๋ํด ํ์ํ ์ต์์ ๋ฐฐ์ถํฐ์ง๋ ์ด ๋ง๋ฆฌ ์๋ฅผ ์ถ๋ ฅํ๋ค.
๋ฌธ์ ํ๊ธฐ
const readline = require("readline");
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
let problemCount = 0; //๋ฌธ์ ๊ฐ์
let arrInfo = []; // ๊ฐ๋ก์ธ๋ก์ ๋ฐฐ์ถ์ ๋ณด
let inputIndex = 0; // input์ ์์น ์ค์
let untilIndex = 0; // ๊ณ ์ ๋์ด์ผ ํ๋ ์ธ๋ฑ์ค
let input = [];
let graph = [];
let visited = [];
let result = [];
let count = 0;
rl.on("line", function (line) {
if (problemCount === 0) problemCount = Number(line.toString());
else if (line.toString().split(" ").length === 3) {
arrInfo.push(
line
.toString()
.split(" ")
.map((el) => Number(el))
);
} else {
input.push(
line
.toString()
.split(" ")
.map((el) => Number(el))
);
}
}).on("close", function () {
for (let i = 0; i < problemCount; i++) {
count = 0;
solution(arrInfo[i]);
}
console.log(result.join("\n"));
process.exit();
});
let solution = (problem) => {
graph = []; // ์ด๊ธฐํ
visited = []; // ์ด๊ธฐํ
graph = Array.from(Array(problem[1]), () => Array(problem[0]).fill(0));
visited = Array.from(Array(problem[1]), () => Array(problem[0]).fill(false));
for (let i = inputIndex; i < inputIndex + problem[2]; i++) {
graph[input[i][1]][input[i][0]] = 1;
}
let BFS = (x, y) => {
let dy = [0, 0, -1, 1];
let dx = [-1, 1, 0, 0];
let queue = [];
visited[x][y] = true;
queue.push([x, y]);
while (queue.length) {
let [mx, my] = queue.shift();
for (let i = 0; i < 4; i++) {
let xx = mx + dx[i];
let yy = my + dy[i];
if (0 <= xx && xx < problem[1] && 0 <= yy && yy < problem[0]) {
if (graph[xx][yy] === 1 && visited[xx][yy] === false) {
visited[xx][yy] = true;
queue.push([xx, yy]);
}
}
}
}
return;
};
for (let i = untilIndex; i < untilIndex + problem[2]; i++) {
if (visited[input[i][1]][input[i][0]] === false) {
BFS(input[i][1], input[i][0]);
count++;
}
inputIndex++;
}
untilIndex = inputIndex;
result.push(count);
return;
};
'๊ฐ์ธ๊ณต๋ถ > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค][Node.js] 1076๋ฒ : ์ ํญ (0) | 2021.06.03 |
---|---|
[๋ฐฑ์ค][Node.js] 1032๋ฒ : ๋ช ๋ น ํ๋กฌํํธ (0) | 2021.06.02 |
[๋ฐฑ์ค][Node.js] 1009๋ฒ : ๋ถ์ฐ์ฒ๋ฆฌ (0) | 2021.05.31 |
[๋ฐฑ์ค][Node.js] 1008๋ฒ : A / B (0) | 2021.05.31 |
[๋ฐฑ์ค][Node.js] 1001๋ฒ : A - B (0) | 2021.05.29 |
๋๊ธ