알고리즘/BFS & DFS

[백준/BFS&DFS/C++] 2468번 안전 영역

데메즈 2023. 2. 4. 10:46
728x90
반응형

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

 

2468번: 안전 영역

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

www.acmicpc.net

 

전체 코드
#include <bits/stdc++.h>

using namespace std;

int N;
int MAP[101][101];
int minValue = 2e9, maxValue = 0;
bool isVisited[101][101];
int dx[] = {-1, 0, 1, 0};
int dy[] = {0, 1, 0, -1};

void clearVisit(){
    for(int i=0; i<N; i++){
        for(int j=0; j<N; j++){
            isVisited[i][j] = false;
        }
    }
}

// 안전영역 체크
void findSafePlace(int h, int r, int c){
    queue<pair<int, int>> q;
    pair<int, int> p;
    p = {r, c};
    q.push(p);

    while(!q.empty()){
        int x = q.front().first;
        int y = q.front().second;
        isVisited[x][y] = true;
        q.pop();

        for(int i=0; i<4; i++){
            int nx = x + dx[i];
            int ny = y + dy[i];
            if(nx<0 || nx>=N || ny<0 || ny>=N) continue;
            if(MAP[nx][ny]>h && !isVisited[nx][ny]){
                isVisited[nx][ny] = true;
                pair<int, int> tmp;
                tmp.first = nx;
                tmp.second = ny;
                q.push(tmp);
            }
        }
    }
}

void input(){
    cin >> N;
    for(int i=0; i<N; i++){
        for(int j=0; j<N; j++){
            int x;
            cin >> x;
            MAP[i][j] = x;
            minValue = min(minValue, x);
            maxValue = max(maxValue, x);
        }
    }
}

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    int result = 0;
    input();
    for(int h=minValue-1; h<maxValue; h++){
        int count = 0;
        clearVisit();
        for(int i=0; i<N; i++){
            for(int j=0; j<N; j++){
                if(MAP[i][j]>h && !isVisited[i][j]){
                    findSafePlace(h, i, j);
                    count++;
                }
            }
        }
        result = max(result, count);
    }
    cout << result;

    return 0;
}

 

728x90
반응형