728x90
https://www.acmicpc.net/problem/2468
처음에 문제를 잘못 이해해서 힘들었다..
안전한 영역의 뭉탱이를 구하는 문제로,
비가 0 ~ 최대값까지 내렸을때의 안전 영역 최대 갯수를 구한다!
(필자는 최소값도 구하여 확인했었으나, 비가 안왔을때의 가정도 있다는 거!!!!!!)
인접한 구역에 대한 방문 처리를 한 후, 1을 리턴한다. (뭉탱이이기에 1 리턴)
그렇게 count를 계산하여 최대 갯수를 구한다~
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
static int[] dx= {1,-1,0,0};
static int[] dy= {0,0,1,-1};
static boolean[][] visited;
static int[][] arr;
static int n;
static int max = Integer.MIN_VALUE;
static int result=0;
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
n= Integer.parseInt(br.readLine());
arr = new int[n][n];
StringTokenizer st;
for(int i=0;i<n;i++) {
st = new StringTokenizer(br.readLine());
for(int j=0;j<n;j++) {
arr[i][j]= Integer.parseInt(st.nextToken());
max =Math.max(arr[i][j],max);
}
}
for(int i=0;i<=max;i++) {
visited=new boolean[n][n];
int count=0;
for(int j=0;j<n;j++) {
for(int z=0;z<n;z++) {
if(!visited[j][z]&&arr[j][z]>i)
count+= dfs(j,z,i);
}
}
result=Math.max(result, count);
}
System.out.println(result);
}
static public int dfs(int x,int y,int size) {
visited[x][y]=true;
for(int i=0;i<4;i++) {
int xx = x+dx[i];
int yy= y+dy[i];
if(xx<0||yy<0||xx>=n||yy>=n||visited[xx][yy]) continue;
if(arr[xx][yy]>size)dfs(xx,yy,size);
}
return 1;
}
}
'Java' 카테고리의 다른 글
[백준 9205] 맥주 마시면서 걸어가기 (JAVA) (0) | 2023.04.20 |
---|---|
[백준 14503] 로봇 청소기 (JAVA) (0) | 2023.04.19 |
[백준 2410] 2의 멱수의 합 (JAVA) (1) | 2023.04.18 |
[백준 1911] 흙길 보수하기 (JAVA) (1) | 2023.04.18 |
[백준 1965] 상자넣기 (JAVA) (0) | 2023.04.18 |