▶코드
import java.util.*;
import java.io.*;
public class Main{
static int[][] danji;
static boolean[][] visited;
static int[] dx = {0,0,-1,1};
static int[] dy = {-1,1,0,0};
static LinkedList<Integer> result;
static int cnt, N;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
result = new LinkedList<>();
N = Integer.parseInt(br.readLine());
danji = new int[N][N];
visited = new boolean[N][N];
cnt = 1;
for(int i=0;i<N;i++){
String str = br.readLine();
for(int j=0;j<N;j++){
danji[i][j] = str.charAt(j)-'0';
}
}
for(int i=0;i<N;i++){
for(int j=0;j<N;j++){
if(danji[i][j]==1 && !visited[i][j]){
dfs(i,j);
result.add(cnt);
cnt = 1;
}
}
}
Collections.sort(result);
System.out.println(result.size());
for(int i=0;i<result.size();i++){
System.out.println(result.get(i));
}
}
public static void dfs(int x, int y){
visited[x][y] = true;
for(int i=0;i<4;i++){
int nx = dx[i] + x;
int ny = dy[i] + y;
if(nx>=0 && ny>=0 &&nx<N && ny<N && !visited[nx][ny] && danji[nx][ny] == 1){
cnt++;
dfs(nx, ny);
}
}
}
}
'알고리즘 > 백준 풀이(탐색)' 카테고리의 다른 글
백준 10026번 - 적록색약(DFS) (1) | 2024.04.20 |
---|---|
백준 11724번 - 연결 요소의 개수(DFS) (0) | 2024.04.19 |
백준 1012번 - 유기농 배추(DFS) (0) | 2024.04.19 |
백준 1260번 - DFS와 BFS (1) | 2024.02.05 |
백준 2606번 - 바이러스(DFS) (0) | 2024.02.04 |