지우너

[코드트리] 안전지대 C++ 본문

Problem Solving

[코드트리] 안전지대 C++

지옹 2024. 9. 26. 16:07

문제

https://www.codetree.ai/missions/2/problems/comfort-zone?&utm_source=clipboard&utm_medium=text

 

코드트리 | 코딩테스트 준비를 위한 알고리즘 정석

국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.

www.codetree.ai

 

코드

#include <iostream>
#include <cstring>
using namespace std;

const int MAX_N = 51;
const int MAX_M = 51;

int n, m, maxHeight;
int waterLevel=1, safeZone; // ans

int house[MAX_N][MAX_M]; // arr
bool visited[MAX_N][MAX_M];

// Func
bool InRange(int x, int y){
    return x>=0 && x<n && y>=0 && y<m;
}

bool CanGo(int x, int y, int l){
    // 범위가 아니면 못 감
    if(!InRange(x, y)) return false;

    // 방문한 지역 || 침수 지역은 못 감
    if(visited[x][y] || house[x][y]<=l) return false;

    return true;
}

// Find NumOfSafeZone
void DFS(int x, int y, int l){
    // 상하좌우
    int dx[4]= {-1, 1, 0, 0};
    int dy[4]= {0, 0, -1, 1};

    for(int dir=0; dir<4; ++dir){
        int nx = x+dx[dir];
        int ny = y+dy[dir];
        if(CanGo(nx, ny, l)){
            visited[nx][ny]=true;
            DFS(nx, ny, l);
        }
    }
}

int main() {
    // input
    cin >> n >> m;
    for(int i=0; i<n; ++i){
        for(int j=0; j<m; ++j){
            cin >> house[i][j];
            maxHeight = max(maxHeight, house[i][j]);
        }
    }

    // DFS
    for(int k=1; k<=maxHeight; ++k){
        int cnt=0;
        memset(visited, false, sizeof(visited));
        for(int i=0; i<n; ++i){
            for(int j=0; j<m; ++j){
                if(visited[i][j] || house[i][j]<=k) continue;
                DFS(i, j, k);
                cnt++;
            }
        }

        // 안전영역이 최대가 되도록 갱신
        if(cnt>safeZone){
            waterLevel=k;
            safeZone=cnt;
        }
    }
    
    // output k, safeZone
    cout << waterLevel << " "<< safeZone <<'\n';
    return 0;
}

'Problem Solving' 카테고리의 다른 글

[코드트리] 트리 정점 거리 C++  (0) 2024.09.27
[코드트리] 트리 판별 C++  (0) 2024.09.27
[코드트리] 트리의 부모 노드 C++  (0) 2024.09.23
[코드트리] 새치기2 C++  (0) 2024.09.23
[코드트리] 새치기 C++  (0) 2024.09.22