내가 개발해볼게!!
[BOJ] 백준 2468번: 안전 영역(Java) 본문
https://www.acmicpc.net/problem/2468
2468번: 안전 영역
재난방재청에서는 많은 비가 내리는 장마철에 대비해서 다음과 같은 일을 계획하고 있다. 먼저 어떤 지역의 높이 정보를 파악한다. 그 다음에 그 지역에 많은 비가 내렸을 때 물에 잠기지 않는
www.acmicpc.net
문제
입력
첫째 줄에는 어떤 지역을 나타내는 2차원 배열의 행과 열의 개수를 나타내는 수 N이 입력된다. N은 2 이상 100 이하의 정수이다. 둘째 줄부터 N개의 각 줄에는 2차원 배열의 첫 번째 행부터 N번째 행까지 순서대로 한 행씩 높이 정보가 입력된다. 각 줄에는 각 행의 첫 번째 열부터 N번째 열까지 N개의 높이 정보를 나타내는 자연수가 빈 칸을 사이에 두고 입력된다. 높이는 1이상 100 이하의 정수이다.
출력
첫째 줄에 장마철에 물에 잠기지 않는 안전한 영역의 최대 개수를 출력한다.
난이도
실버 1
Sol
아무 지역도 물에 잠기지 않을 수 있다는 조건이 있기 때문에 이를 고려하여 answer의 초기값을 1로 줘야 한다. 로직에서 걸러낼 수 있을 줄 알고 answer의 초기값을 0으로 줬었는데 안되네.. N과 상관 없이 배열의 모든 요소를 1로 입력했을 때의 결과로 확인할 수 있다.
public class B2468_안전영역 {
static int[][] field;
static boolean[][] isvisited;
static int N;
static int answer = 1;
static int[] dx = {1, -1, 0, 0};
static int[] dy = {0, 0, -1, 1};
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer token = new StringTokenizer(bf.readLine());
N = Integer.parseInt(token.nextToken());
field = new int[N][N];
int max = 0;
for(int i=0; i<N; i++){
token = new StringTokenizer(bf.readLine());
for(int j=0; j<N; j++){
field[i][j] = Integer.parseInt(token.nextToken());
max = Integer.max(field[i][j], max);
}
}
// input
for(int i=1; i<max; i++){
isvisited = new boolean[N][N];
int count = 0;
for(int j=0; j<N; j++){
for(int k=0; k<N; k++){
if(field[j][k]<=i) isvisited[j][k] = true;
// 물에 잠기는 영역을 방문 처리해 탐색 시 방문하지 못하게 한다
}
}
for(int j=0; j<N; j++){
for(int k=0; k<N; k++){
if(!isvisited[j][k]){
count++;
isvisited[j][k] = true;
search(j, k);
}
}
}
answer = Integer.max(answer, count);
// System.out.println(i + "까지 물에 잠길 때, 영역의 최대 개수 " + count);
}
// operation
System.out.println(answer);
// output
}
static void search(int x, int y){
for(int i=0; i<4; i++){
int nx = x + dx[i];
int ny = y + dy[i];
if(nx<0 || ny < 0 || nx >=N || ny >= N) continue;
if(!isvisited[nx][ny]){
isvisited[nx][ny] = true;
search(nx, ny);
}
}
}
}
'Algorithm > BOJ' 카테고리의 다른 글
[BOJ] 백준 1189번: 컴백홈(Java) (0) | 2023.10.05 |
---|---|
[BOJ] 백준 2841번: 외계인의 기타 연주 (0) | 2023.09.21 |
[BOJ] 백준 11729번: 하노이 탑 이동 순서(Java) (0) | 2023.09.15 |
[BOJ] 백준 3184번: 양(Java) (0) | 2023.09.12 |
[BOJ] 백준 15900번: 나무 탈출(Java) (0) | 2023.09.07 |