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);
}
}
}
'백준' 카테고리의 다른 글
백준 12852 1로 만들기 2(Java) (0) | 2023.02.19 |
---|---|
백준 1325 효율적인 해킹(Java) (0) | 2023.02.19 |
백준 2529 부등호(Java) (0) | 2023.02.19 |
백준 2504 괄호의 값(Java) (0) | 2023.02.19 |
백준 1890 점프(Java) (0) | 2023.02.18 |