BFS 문제 풀어봤습니다.
힘들어!
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class boj1926 {
static int[][] arr;
static boolean[][] visited;
static int[] dx = {-1,1,0,0};
static int[] dy = {0,0,-1,1};
static int max = 0;
static int picutre = 0;
static int R;
static int C;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
R = sc.nextInt();
C = sc.nextInt();
arr = new int[R][C];
visited = new boolean[R][C];
for(int i=0; i<R; i++){
for(int j=0; j<C; j++){
arr[i][j] = sc.nextInt();
}
}
for(int i=0; i<R; i++){
for(int j=0; j<C; j++){
if(visited[i][j] == false && arr[i][j] == 1) {
visited[i][j] = true;
Pair pair = new Pair(i,j);
BFS(pair);
picutre++;
}
}
}
System.out.println(picutre);
System.out.println(max);
}
private static void BFS(Pair pair) {
Queue<Pair> queue = new LinkedList<>();
queue.add(pair);
int area = 1;
while (!queue.isEmpty()){
Pair cur = queue.poll();
// System.out.println("CUR X " + cur.x + " CUR Y " + cur.y);
for(int dir=0; dir<4; dir++){
int nx = cur.x + dx[dir];
int ny = cur.y + dy[dir];
if(nx <0 || nx >= R || ny<0 || ny >= C) continue;
if(visited[nx][ny] == true || arr[nx][ny] == 0) continue;
visited[nx][ny] = true;
queue.add(new Pair(nx,ny));
area++;
}
}
max = Math.max(area, max);
}
static class Pair{
int x;
int y;
Pair(int x, int y){
this.x = x;
this.y = y;
}
}
}
'알고리즘' 카테고리의 다른 글
프로그래머스 - 소수찾기(완전탐색, 에라토네스의 체) (1) | 2020.09.09 |
---|---|
BOJ 2178 - 미로 탐색(BFS) (1) | 2020.08.31 |
BOJ 1912 - 연속합 ( 완전탐색, Prefix Sum, DP) (0) | 2020.08.30 |
BOJ 11726 - 2 x N 타일링 (0) | 2020.08.30 |
BOJ 1149 - RGB거리 (0) | 2020.08.30 |