본문 바로가기
알고리즘 & 자료구조/백준

백준 2667

by 신재권 2022. 6. 5.
package baekjoon;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;

//단지 번호 붙이기
// https://www.acmicpc.net/problem/2667
public class Main2667 {

   private static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
   private static int N, cnt;
   private static List<Integer> ans = new ArrayList<>();
   private static int[] dy = {-1, 0, 1, 0};
   private static int[] dx = {0, 1, 0, -1};
   private static int[][] map;
   private static boolean[][] visited;

   public static void main(String[] args) throws Exception {
      N = Integer.parseInt(br.readLine());
      map = new int[N][N];
      visited = new boolean[N][N];
      for (int i = 0; i < N; i++) {
         String s = br.readLine();
         for (int j = 0; j < s.length(); j++) {
            map[i][j] = s.charAt(j) - '0';
         }
      }

      for (int i = 0; i < N; i++) {
         for (int j = 0; j < N; j++) {
            if(map[i][j] == 0 || visited[i][j]) continue;
            cnt = 1;
            DFS(i, j);
            ans.add(cnt);
         }
      }

      System.out.println(ans.size());
      ans.sort(null);
      for (Integer a : ans) {
         System.out.println(a);
      }

   }

   private static int DFS(int y, int x) {
      visited[y][x] = true;
      for (int i = 0; i < 4; i++) {
         int ny = y + dy[i];
         int nx = x + dx[i];
         if(isMap(ny, nx) || visited[ny][nx] || map[ny][nx] == 0) continue;
         visited[ny][nx] = true;
         cnt++;
         DFS(ny, nx);
      }
      return cnt;
   }

   //BFS

   private static boolean isMap(int ny, int nx) {
      return ny >= N || nx >= N || ny < 0 || nx < 0;
   }

   class Pair{
      int y,x;

      public Pair(int y, int x) {
         this.y = y;
         this.x = x;
      }
   }

}

'알고리즘 & 자료구조 > 백준' 카테고리의 다른 글

백준 24480  (0) 2022.06.16
백준 24479  (0) 2022.06.16
백준 9663  (0) 2022.05.22
백준 14888  (0) 2022.05.19
백준 15650  (0) 2022.05.19