공부기록/백준

[백준] 2667번 단지번호붙이기

메델 2023. 9. 24. 18:24
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
public class Main {
	
	static String[] a;
	static int n;
	static boolean[][] visit;
	static ArrayList<Integer> group;
	static int groupCount;
	static int[][] dir = {{-1,0},{1,0},{0,-1},{0,1}};
	
	
	static void DFS(int x, int y) {
		groupCount++;
		visit[x][y] = true;
		
		for(int i=0; i<4; i++) {
			int nx = x + dir[i][0];
			int ny = y + dir[i][1];
			
			if(nx<0 || ny<0 || ny>=n || nx>=n) continue;
			if(visit[nx][ny] || a[nx].charAt(ny)=='0') continue;
			DFS(nx, ny);
		}
	}
	
	
	public static void main(String[] args) {
		
		Scanner kb = new Scanner(System.in);
		n = kb.nextInt();
		 kb.nextLine();
		a = new String[n];
		for(int i=0; i<n; i++) {
			a[i] = kb.nextLine();
		}
		visit = new boolean[n][n];
		
		group = new ArrayList<>();
		
		for(int i=0; i<n; i++) {
			for(int j=0; j<n; j++) {
				if(a[i].charAt(j)=='1' && !visit[i][j]) {
					groupCount =0;
					DFS(i, j);
					group.add(groupCount);
				}
			}
		}
		Collections.sort(group);
		System.out.println(group.size());
		for(int x: group) {
			System.out.println(x);
		}

		
	}
}

'공부기록 > 백준' 카테고리의 다른 글

[백준] 1110번 더하기 사이클  (0) 2023.09.27
[백준] 4963번 섬의 개수  (0) 2023.09.24
[백준] 1260번 DFS와 BFS  (0) 2023.09.23
[백준] 1076번 저항  (0) 2023.09.22
[백준] 11720번 숫자의 합 구하기  (0) 2023.08.30