import java.util.ArrayList; import java.util.Arrays; import java.util.Scanner; public class Main { static int arr[][]; static int dx[]= {-1,0,1,0}; static int dy[]= {0,1,0,-1}; static boolean visit[][]; static int color; static int size; public static void main(String[] args) { Scanner sc = new Scanner(System.in); size = Integer.parseInt(sc.nextLine()); arr= new int[size][size]; visit=new boolean[size][size]; color=0; ArrayList a= new ArrayList(); for(int i=0;i<size;i++) { String s= sc.nextLine(); for(int j=0;j<size;j++) { arr[i][j]=s.charAt(j)-'0'; } } for(int i=0;i<size;i++) { for(int j=0;j<size;j++) { if(arr[i][j]==1&&visit[i][j]==false) { color++; visit[i][j]=true; arr[i][j]=color; DFS(i,j); } } } //출력 System.out.println(color); int count[] =new int[color+1]; for(int i=1;i<=color;i++) { for(int j=0;j<size;j++) { for(int k=0;k<size;k++) { if(arr[j][k]==i) { count[i]++; } } } } Arrays.sort(count); for(int i=1;i<=color;i++) { System.out.println(count[i]); } } private static void DFS(int xx, int yy) { int x= xx; int y= yy; for(int i=0;i<4;i++) { int rx= x+dx[i]; int ry= y+dy[i]; if(rx<0||ry<0||rx>=size||ry>=size||arr[rx][ry]==0) { continue; }if(visit[rx][ry]==true) { continue; }if(arr[rx][ry]==1) { arr[rx][ry]=color; visit[rx][ry]=true; DFS(rx,ry); } } } }
'코딩테스트(백준)' 카테고리의 다른 글
[백준] 2960 : 에라토스테네스의 체 -JAVA - 사좋배 공유 (0) | 2020.02.21 |
---|---|
[백준] 2941 : 크로아티아 알파벳 -JAVA - 사좋배 공유 (0) | 2020.02.21 |
[백준] 2146- 다리 만들기 - JAVA - 사좋배 공유 (0) | 2020.02.21 |
[백준] 1697 - 숨바꼭질 - JAVA - 사좋배 공유 (0) | 2020.02.21 |
[백준] 2563번: 색종이 -JAVA - 사좋배 공유 (0) | 2019.09.25 |