π‘λ¬Έμ λΆμ μμ½
- λ¬Έμ μ€λͺ
- μ£Όμ΄μ§ μ§λλ
N x N
ν¬κΈ°μ 2μ°¨μ λ°°μ΄λ‘ μ΄λ£¨μ΄μ Έ μμΌλ©°, κ° μΉΈμ 0 λλ 1λ‘ νμλλ€.
1
μ μ§μ΄ μλ κ³³μ μλ―Ένκ³ , 0
μ μ§μ΄ μλ κ³³μ μλ―Ένλ€.
- μνμ’μ°λ‘ μ°κ²°λ
1
μ νλμ λ¨μ§λ₯Ό μ΄λ£¬λ€.
- κ° λ¨μ§μ μνλ μ§μ μλ₯Ό μ€λ¦μ°¨μμΌλ‘ μΆλ ₯ν΄μΌ νλ€.
- μ
λ ₯
- 첫째 μ€μλ μ§λμ ν¬κΈ°
N
μ΄ μ£Όμ΄μ§λ€. (5 <= N <= 25
)
- κ·Έλ€μ
N
μ€μ κ±Έμ³ κ° μ€μ Nκ°μ μ«μλ‘ μ΄λ£¨μ΄μ§ μ§λκ° μ£Όμ΄μ§λ€.
- μΆλ ₯
- μ΄ λ¨μ§ μμ κ° λ¨μ§μ μνλ μ§μ μλ₯Ό μ€λ¦μ°¨μμΌλ‘ μΆλ ₯νλ€.
π‘μκ³ λ¦¬μ¦ μ€κ³
- κ·Έλν νμ
- κ° μμΉμμ μνμ’μ°λ‘ μ°κ²°λ μ§(=1)μ μ°Ύμμ νλμ λ¨μ§λ‘ κ·Έλ£Ήνν΄μΌ νλ€.
- μ΄λ₯Ό μν΄ DFS λλ BFS νμμ μ΄μ©νμ¬, μ΄λ―Έ λ°©λ¬Έν μ§μ λ€μ νμνμ§ μλλ‘ ν΄μΌ νλ€.
- λ¨μ§ μ°ΎκΈ°
- 2μ°¨μ λ°°μ΄μ μννλ©΄μ
1
μ λ°κ²¬νλ©΄ μλ‘μ΄ λ¨μ§λ₯Ό μμνλ€.
- ν΄λΉ μμΉμμ DFS λλ BFS νμμ μμνμ¬ μ°κ²°λ λͺ¨λ μ§μ λ°©λ¬Ένκ³ λ¨μ§μ ν¬κΈ°λ₯Ό κ³μ°νλ€.
- λ¨μ§ ν¬κΈ° κ³μ°μ΄ λλλ©΄ κ·Έ ν¬κΈ°λ₯Ό μ μ₯νκ³ , λ€μ νμμ μ§ννλ€.
- μκ³ λ¦¬μ¦ μΈλΆ λ¨κ³
- κ° λ¨μ§μ ν¬κΈ°λ₯Ό μ μ₯ν λ°°μ΄μ λ§λ λ€.
- 2μ°¨μ λ°°μ΄μμ μ§μ΄ μλ μΉΈ(1)μ λ°κ²¬ν λλ§λ€ DFS λλ BFSλ‘ ν΄λΉ λ¨μ§μ μνλ μ§λ€μ λͺ¨λ λ°©λ¬Ένλ€.
- κ° λ¨μ§μ ν¬κΈ°λ₯Ό κ³μ°ν ν μ€λ¦μ°¨μμΌλ‘ μΆλ ₯νλ€.
π‘μ½λ
const fs = require('fs');
const path = require('path');
const input = fs.readFileSync(path.join(__dirname, 'input.txt')).toString().trim().split('\\n')
const N = parseInt(input[0], 10); // 첫 λ²μ§Έ μ€μ μ§λμ ν¬κΈ° N
const map = input.slice(1).map((line) => line.split('').map(Number)); // 2μ°¨μ λ°°μ΄λ‘ λ³ν
function solution(N, map) {
const dx = [-1, 1, 0, 0]; // μ, ν, μ’, μ°
const dy = [0, 0, -1, 1];
const visited = Array.from({ length: N }, () => Array(N).fill(false)); // λ°©λ¬Έ λ°°μ΄
const complexes = []; // λ¨μ§λ³ μ§μ μλ₯Ό μ μ₯ν λ°°μ΄
// DFS ν¨μ
const dfs = (x, y) => {
let count = 1; // μ§ νλλ₯Ό λ°κ²¬νμΌλ―λ‘ μ΄κΈ° κ° 1
visited[x][y] = true;
// μνμ’μ°λ‘ νμ
for (let i = 0; i < 4; i++) {
const nx = x + dx[i];
const ny = y + dy[i];
// μ§λμ λ²μλ₯Ό λ²μ΄λμ§ μλλ‘
if (nx >= 0 && ny >= 0 && nx < N && ny < N) {
// λ°©λ¬Ένμ§ μμκ³ , μ§μ΄ μμ κ²½μ°
if (!visited[nx][ny] && map[nx][ny] === 1) {
// μ¬κ·μ μΌλ‘ νμνλ©΄μ μ§μ μλ₯Ό λν΄μ€
count += dfs(nx, ny);
}
}
}
return count; // ν΄λΉ λ¨μ§μ μ΄ μ§ μ λ°ν
};
// μ 체 맡 νμ
for (let i = 0; i < N; i++) {
for (let j = 0; j < N; j++) {
// μ§μ΄ μλ μμΉμμ DFS μμ
if (map[i][j] === 1 && !visited[i][j]) {
const complexSize = dfs(i, j);
complexes.push(complexSize); // λ¨μ§ ν¬κΈ°λ₯Ό μ μ₯
}
}
}
complexes.sort((a, b) => a - b); // μ€λ¦μ°¨μ μ λ ¬
console.log(complexes.length); // μ΄ λ¨μ§ μ μΆλ ₯
complexes.forEach((size) => console.log(size)); // κ° λ¨μ§μ μ§ μ μΆλ ₯
}
solution(N, map);
π‘μκ°λ³΅μ‘λ
- λͺ¨λ λ
Έλλ₯Ό ν λ²μ© λ°©λ¬Ένλ―λ‘
O(N^2)
μ΄λ€.
N
μ μ§λμ ν¬κΈ°, μ΅λ κ°μ 25