728x90
import java.util.*;
import java.io.*;
public class 백준2667단지번호붙이기 {
static int tmpcnt = 0 ;
static int size;
static int[][] arr ;
static int[][] visit ;
static boolean check(int i, int j) {
if(0<=i&&i<size && 0<=j&&j<size)return true;
return false;
}
static int[] di = {-1, 0, 1, 0};
static int[] dj = {0, 1, 0, -1};
static void dfs(int i, int j) {
tmpcnt++;
visit[i][j] = 1;
for(int d=0; d<4; d++) {
int ni = i+di[d];
int nj = j+dj[d];
if(check(ni,nj)&&visit[ni][nj]==0&&arr[ni][nj]==1) {
dfs(ni,nj);
}
}
}
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
size = Integer.parseInt(br.readLine());
arr = new int[size][size];
visit = new int[size][size];
for(int i=0; i<size; i++) {
String st = br.readLine();
for(int j=0; j<size; j++) {
arr[i][j] = st.charAt(j)-'0';
}
}
int allcnt = 0;
List<Integer> list = new ArrayList<>();
for(int i=0; i<size; i++) {
for(int j=0; j<size; j++) {
if(arr[i][j]==1 && visit[i][j]==0) {
tmpcnt = 0;
dfs(i,j);
list.add(tmpcnt);
allcnt++;
}
}
}
System.out.println(allcnt);
Collections.sort(list);
for(int i=0; i<list.size(); i++) {
System.out.println(list.get(i));
}
}
}
'알고리즘 문제풀이' 카테고리의 다른 글
[알고리즘] 백준17472 - 다리만들기2 java (0) | 2022.04.01 |
---|---|
[알고리즘] 백준4485 - 녹색 옷 입은 애가 젤다지? java풀이 (0) | 2022.04.01 |
[알고리즘] SW expert - 최소 스패닝 트리 java (Prim 풀이) (0) | 2022.03.30 |
[알고리즘] SW expert - 최소 스패닝 트리 java (크루스칼 풀이) (0) | 2022.03.30 |
[알고리즘] 백준21610 - 마법사 상어와 비바라기 java (0) | 2022.03.27 |