백준

백준 1926 그림(Java)

Park DJ 2023. 2. 19. 15:57

https://www.acmicpc.net/problem/1926

 

1926번: 그림

어떤 큰 도화지에 그림이 그려져 있을 때, 그 그림의 개수와, 그 그림 중 넓이가 가장 넓은 것의 넓이를 출력하여라. 단, 그림이라는 것은 1로 연결된 것을 한 그림이라고 정의하자. 가로나 세로

www.acmicpc.net


 

Java 코드

 


import java.util.Scanner;
import java.util.ArrayList;
import java.util.Collections;

public class Main {

  static int count;
  static int n;
  static int m;
  static int[] dx = {1, -1, 0, 0};
  static int[] dy = {0, 0, -1, 1};
  static int[][] arr;
  static boolean[][] visit;
  static ArrayList<Integer> list = new ArrayList<>();

  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);

    n = sc.nextInt();
    m = sc.nextInt();
    arr = new int[n][m];
    visit = new boolean[n][m];
    boolean check = false;
    
    for(int i = 0; i < n; i++) {
      for(int j = 0; j < m; j++) {
        int num = sc.nextInt();;
        arr[i][j] = num;
        if(num == 1) check = true;
      }
    }

    if(check == false) {
      System.out.println(0);
      System.out.println(0);
      return;
    }

    for(int i = 0; i < n; i++) {
      for(int j = 0; j < m; j++) {
        if(arr[i][j] != 0 && visit[i][j] == false) {
          count = 0;
          dfs(i, j);
          list.add(count);
        }
      }
    }

    Collections.sort(list);

    System.out.println(list.size());
    System.out.println(list.get(list.size() - 1));
  }

  public static void dfs(int a, int b) {
    visit[a][b] = true;
    count++;
    for(int i = 0; i < 4; i++) {
      int x = a + dx[i];
      int y = b + dy[i];
      if(x >= 0 && x < n && y >= 0 && y < m && arr[x][y] != 0 && visit[x][y] == false) dfs(x, y);
    }
  }
  
}