본문 바로가기
알고리즘/그래프

[java 백준] 실버 1/ 2368번 안전영역

by Meaning_ 2023. 1. 15.
728x90
반응형

https://www.acmicpc.net/problem/2468

 

2468번: 안전 영역

재난방재청에서는 많은 비가 내리는 장마철에 대비해서 다음과 같은 일을 계획하고 있다. 먼저 어떤 지역의 높이 정보를 파악한다. 그 다음에 그 지역에 많은 비가 내렸을 때 물에 잠기지 않는

www.acmicpc.net

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
 
class Main {
 
 
    public static int N;
    public static int[][] arr;
    public static boolean[][] visited;
 
    public static int max=1;
 
    public static int dirX[]={0,0,1,-1};
    public static int dirY[]={-1,1,0,0};
 
    public static class Node{
        int x;
        int y;
        public Node(int x,int y){
            this.x=x;
            this.y=y;
        }
    }
 
 
    public static void BFS(int std){
 
        visited=new boolean[N+1][N+1];
 
        Queue<Node> queue=new LinkedList<Node>();
 
        int count=0;
 
        for(int i=0;i<N;i++){
            for(int j=0;j<N;j++){
                if(arr[i][j]>std&&!visited[i][j]){
 
 
 
                    queue.add(new Node(i,j));
                    visited[i][j]=true;
 
                    while(!queue.isEmpty()){
                        Node node=queue.poll();
 
                        for(int x=0;x<4;x++){
                            int nx=node.x+dirX[x];
                            int ny=node.y+dirY[x];
                            if(nx>=0&&nx<N&&ny>=0&&ny<N&&!visited[nx][ny]){
                                if(arr[nx][ny]>std){
 
                                    visited[nx][ny]=true;
                                    queue.add(new Node(nx,ny));
 
                                }
 
                            }
                        }
 
 
                    }
                    count++;
 
                    queue.clear();
 
 
 
                }
            }
        }
 
 
        max=Math.max(max,count);
 
 
    }
 
 
 
 
 
    // 양방향 간선으로 해야함
    public static void main(String args[]) throws NumberFormatException, IOException, IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
 
        StringTokenizer st;
        N=Integer.parseInt(br.readLine());
        arr=new int[N+1][N+1];
 
        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());
 
            }
        }
 
 
 
        for(int h=1;h<=100;h++){
 
            BFS(h);
        }
 
        System.out.println(max);
 
 
 
 
 
 
    }
}
 
cs

 

모든 곳이 다 물에 잠기는 경우의 수도 있다 예를 들면

2

1 1

1 1

이 그것이다.

이때는 답이 1이여야했다! (참고하세용~~)

728x90
반응형

댓글