본문 바로가기

알고리즘 문제풀이

[알고리즘] 백준2667- 단지 번호 붙이기 java

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));
		}
		
	}
}