카테고리 없음
[알고리즘 문제 풀이] 백준 2468 안전영역 (BFS/DFS)
컴맹 개발자
2024. 7. 11. 19:55
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
import java.util.Scanner;
public class Main{
static int N;
static int[][] arr;
static boolean[][] visited;
static int safeArea;
static int[] dx = {-1,1,0,0};
static int[] dy = {0,0,-1,1};
static int maxHeight;
static int ans;
public static void main(String[] args) throws IOException{
BufferedReader br =new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st =new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
arr=new int[N][N];
maxHeight=0;
for(int i=0;i<N;i++){
st = new StringTokenizer(br.readLine());
for(int j=0;j<N;j++){
int k = Integer.parseInt(st.nextToken());
arr[i][j]=k;
if(maxHeight <k){
maxHeight = k;
}
}
}
safeArea=0;
ans=0;
for(int h=0;h<=maxHeight;h++){
visited=new boolean[N][N];
for(int i=0;i<N;i++){
for(int j=0;j<N;j++){
if(arr[i][j] > h && !visited[i][j]) {
dfs(i, j, h);
safeArea++;
}
}
}
if(ans < safeArea) ans=safeArea;
safeArea=0;
}
System.out.println(ans);
}
static void dfs(int x,int y,int h){
visited[x][y]=true;
for(int i=0;i<4;i++){
int movedX = dx[i]+x;
int movedY = dy[i]+y;
if(movedX <0 || movedY<0 || movedX>=N || movedY>=N) continue;
if(visited[movedX][movedY]) continue;
if(arr[movedX][movedY] <= h) continue;
dfs(movedX,movedY,h);
}
}
}