https://www.acmicpc.net/problem/2667
2667번: 단지번호붙이기
<그림 1>과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여
www.acmicpc.net
const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().trim().split("\n");
const vector = [[1,0], [-1,0], [0,1], [0,-1]];
let cnt = 0;
const N = Number(input.shift());
const maps = input.map((i) => {
i = i.split("").map(d => Number(d));
return i;
});
const dfs = (start) => {
const stack = [start];
let cnt = 0;
while(stack.length) {
const cur = stack.pop();
if(maps[cur[0]][cur[1]]) {
maps[cur[0]][cur[1]] = 0;
cnt++;
const vectors = [];
vector.forEach((v) => {
if(v[0]+cur[0] >= 0 && v[0]+cur[0] < maps.length && v[1]+cur[1] >= 0 && v[1]+cur[1] < maps[0].length) {
vectors.push([v[0]+cur[0], v[1]+cur[1]]);
}
});
stack.push(...vectors);
}
}
return cnt;
}
let answer = 0;
let answerArr = [];
for(let i = 0; i < maps.length ; i++) {
for(let j = 0 ; j < maps[0].length ; j++) {
const result = dfs([i,j]);
if(result) {
answer++;
answerArr.push(result);
}
}
}
answerArr = answerArr.sort(function(a,b) {
return a - b;
});
console.log(answer);
for(let i = 0 ; i < answer ;i ++) {
console.log(answerArr[i]);
}
728x90
'Algorithm&CodingTest > Baekjoon' 카테고리의 다른 글
[Baekjoon] [2178] DFS/BFS 실버1 - 미로 탐색 (0) | 2023.03.17 |
---|---|
[Baekjoon] [1766] 위상정렬 골드2 - 문제집 (0) | 2023.03.15 |
[ Baekjoon ] [11724] DFS/BFS 실버 2 - 연결 요소의 개수 (0) | 2023.03.14 |
[ Baekjoon ] [1260] DFS/BFS 실버 2 - DFS와 BFS (0) | 2023.03.13 |
[ Baekjoon ] [1049] 그리디 실버3 - 기타줄 (0) | 2023.03.13 |