let's get IT with DAVINA ๐ป
[๋ฐฑ์ค #1926] ๊ทธ๋ฆผ → BFS ํ์ฉ ๋ณธ๋ฌธ
โ ๋ฌธ์
์ด๋ค ํฐ ๋ํ์ง์ ๊ทธ๋ฆผ์ด ๊ทธ๋ ค์ ธ ์์ ๋, ๊ทธ ๊ทธ๋ฆผ์ ๊ฐ์์, ๊ทธ ๊ทธ๋ฆผ ์ค ๋์ด๊ฐ ๊ฐ์ฅ ๋์ ๊ฒ์ ๋์ด๋ฅผ ์ถ๋ ฅํ์ฌ๋ผ. ๋จ, ๊ทธ๋ฆผ์ด๋ผ๋ ๊ฒ์ 1๋ก ์ฐ๊ฒฐ๋ ๊ฒ์ ํ ๊ทธ๋ฆผ์ด๋ผ๊ณ ์ ์ํ์. ๊ฐ๋ก๋ ์ธ๋ก๋ก ์ฐ๊ฒฐ๋ ๊ฒ์ ์ฐ๊ฒฐ์ด ๋ ๊ฒ์ด๊ณ ๋๊ฐ์ ์ผ๋ก ์ฐ๊ฒฐ์ด ๋ ๊ฒ์ ๋จ์ด์ง ๊ทธ๋ฆผ์ด๋ค. ๊ทธ๋ฆผ์ ๋์ด๋ ๊ทธ๋ฆผ์ ํฌํจ๋ 1์ ๊ฐ์์ด๋ค.
๐๏ธ ์ ๋ ฅ
์ฒซ์งธ ์ค์ ๋ํ์ง์ ์ธ๋ก ํฌ๊ธฐ n(1 ≤ n ≤ 500)๊ณผ ๊ฐ๋ก ํฌ๊ธฐ m(1 ≤ m ≤ 500)์ด ์ฐจ๋ก๋ก ์ฃผ์ด์ง๋ค. ๋ ๋ฒ์งธ ์ค๋ถํฐ n+1 ์ค ๊น์ง ๊ทธ๋ฆผ์ ์ ๋ณด๊ฐ ์ฃผ์ด์ง๋ค. (๋จ ๊ทธ๋ฆผ์ ์ ๋ณด๋ 0๊ณผ 1์ด ๊ณต๋ฐฑ์ ๋๊ณ ์ฃผ์ด์ง๋ฉฐ, 0์ ์์น ์ด ์๋ ๋ถ๋ถ, 1์ ์์น ์ด ๋ ๋ถ๋ถ์ ์๋ฏธํ๋ค)
๐๏ธ ์ถ๋ ฅ
์ฒซ์งธ ์ค์๋ ๊ทธ๋ฆผ์ ๊ฐ์, ๋์งธ ์ค์๋ ๊ทธ ์ค ๊ฐ์ฅ ๋์ ๊ทธ๋ฆผ์ ๋์ด๋ฅผ ์ถ๋ ฅํ์ฌ๋ผ. ๋จ, ๊ทธ๋ฆผ์ด ํ๋๋ ์๋ ๊ฒฝ์ฐ์๋ ๊ฐ์ฅ ๋์ ๊ทธ๋ฆผ์ ๋์ด๋ 0์ด๋ค.
๐๏ธ ์์ ์ ๋ ฅ ๋ฐ ์ถ๋ ฅ
//์
๋ ฅ
6 5
1 1 0 1 1
0 1 1 0 0
0 0 0 0 0
1 0 1 1 1
0 0 1 1 1
0 0 1 1 1
//์ถ๋ ฅ
4
9
โ๏ธ ๋น๋'s ํ์ด
BFS๊ตฌํ์ ๊ธฐ๋ณธ ์ ์ ๋ฌธ์ ๋ผ๋๋ฐ ์ ๋๋ก ๊ฐ๋ ์ ์ดํด๋ชปํ๊ฑด์ง ์ฝ๋๋ก ๊ตฌํํ๋ ค๋ x๊ฐ ํ์ธ์ง, y๊ฐ ํ์ธ์ง๋ถํฐ ํท๊ฐ๋ ค์ ๋จธ๋ฆฌ๊ฐ ๋ฝ๊ฐ์ง๊ฒ๊ฐ๋ค...
const fs = require("fs");
let input = fs
.readFileSync("/dev/stdin")
.toString()
.trim()
.split("\n")
.map((el) => el.split(" ").map((item) => +item));
//๋ณด๋๋ง๋ค๊ธฐ
const [n, m] = input.shift();
//๋ฐฉ๋ฌธํ๋์ง ํ์์ ๋ง๋ค๊ธฐ
const visited = Array.from({ length: n }, () => new Array(m).fill(false));
//์ํ์ข์ฐ ๋ฐฉํฅ
let direction = [
[1, 0],
[-1, 0],
[0, 1],
[0, -1],
];
let answer = 0; //๊ทธ๋ฆผ์ ๊ฐ์
let result = []; //๊ทธ๋ฆผ์ ๋์ด
const BFS = (start) => {
let queue = [start];
let square = 0; //๊ทธ๋ฆผ์ ๋์ด
while (queue.length) {
let [y, x] = queue.shift();
if (visited[y][x]) continue;
visited[y][x] = true;
square++;
for (let i = 0; i < direction.length; i++) {
let [dy, dx] = [y + direction[i][0], x + direction[i][1]]; //๊ธฐ์ค์ ์ ๊ธฐ์ค์ผ๋ก ์ํ์ข์ฐ ์ดํผ๊ธฐ
if (dy < 0 || dx < 0 || dy >= n || dx >= m) continue; //๋ณด๋ํ์ ๋ฒ์ด๋๋ฉด ๊ทธ๋ฅ ๋์ด๊ฐ
if (visited[dy][dx]) continue; //์ด๋ฏธ ๋ฐฉ๋ฌธํ๊ณณ์ด๋ฉด ๊ทธ๋ฅ ๋์ด๊ฐ
if (input[dy][dx] === 1) {
//๋ณด๋ํ ๋ด์ ๋ฐฉ๋ฌธํ์ง ์์๋๋ฐ ์ซ์1์ด์ผ? ๊ทธ๋ผ ํ์ ์ถ๊ฐ
queue.push([dy, dx]);
}
}
}
if (square) {
answer++;
result.push(square);
}
};
for (let i = 0; i < n; i++) {
for (let j = 0; j < m; j++) {
if (input[i][j] === 1 && !visited[i][j]) {
//๋ณด๋ํ ๋ด์ ๋ฐฉ๋ฌธํ์ง ์์ ๊ณณ์ด๋ฉด ๊ธฐ์ค์ ์ ๋ค์ด๊ฐ์
BFS([i, j]);
}
}
}
if (!answer) return console.log(0 + "\n" + 0);
console.log(answer + "\n" + Math.max(...result));
⊕ Extra Knowledge ++
- Array.from()
- ์ ์ฌ ๋ฐฐ์ด ๊ฐ์ฒด(array-like object)๋ ๋ฐ๋ณต ๊ฐ๋ฅํ ๊ฐ์ฒด(iterable object)๋ฅผ ์๊ฒ ๋ณต์ฌํด ์๋ก์ดArray ๊ฐ์ฒด๋ฅผ ๋ง๋ญ๋๋ค.
console.log(Array.from('foo'));
// Expected output: Array ["f", "o", "o"]
console.log(Array.from([1, 2, 3], x => x + x));
// Expected output: Array [2, 4, 6]
- "123" → +"123" → 123(number type)
Array.map((item) => +item)); //์์๋ค์ number type์ผ๋ก ๋ณํํด์ค
'DEV_IN > ๋ฌธ์ ํ์ด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค]Lv0. ๋๋ฌธ์์ ์๋ฌธ์ (0) | 2023.03.23 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค]Lv0. ์ ๊ณฑ์ ํ๋ณํ๊ธฐ (0) | 2023.03.22 |
[ํ๋ก๊ทธ๋๋จธ์ค]Lv2. ์ฌ๋ฐ๋ฅธ ๊ดํธ (2) | 2023.03.22 |
[ํ๋ก๊ทธ๋๋จธ์ค]Lv2. ์ต์๊ฐ ๋ง๋ค๊ธฐ (0) | 2023.03.21 |
[๋ฐฑ์ค #4949] ๊ท ํ์กํ ์ธ์ (2) | 2023.03.21 |