• Home
  • About
    • Develop Woongs photo

      Develop Woongs

      make awesome woongs

    • Learn More
    • Facebook
    • Instagram
    • Github
  • Posts
    • All Posts
    • All Tags
  • Projects

Algorithm-BOJ-10026

13 Mar 2019

Reading time ~1 minute

2468번: 안전 영역

전형적인 DFS 문제이다. 비의 양이 0인 경우도 있다는 것에 주의하면서 0~100까지 DFS를 돌려 가장 큰 안전영역의 개수를 구하는 문제!

풀이보기
```c++
    #include <iostream>
    
    int map[101][101];
    bool visited[101][101];
    int height;
    int cnt;
    int ans;
    int N;
    
    int mR[4] = { -1, 0, 1, 0 };
    int mC[4] = { 0, 1, 0, -1 };
    
    void input() {
        for(int i=0; i<N; i++) {
            for(int j=0; j<N; j++) {
                scanf(" %d", &map[i][j]);
            }
        }
    }
    
    void reset() {
        for(int i=0; i<N; i++) {
            for(int j=0; j<N; j++) {
                visited[i][j] = false;
            }
        }
    }
    
    void dfs(int r, int c) {
        visited[r][c] = true;
        for(int i=0; i<4; i++) {
            int nextR = r + mR[i];
            int nextC = c + mC[i];
            
            if(nextR>=0 && nextR<N && nextC>=0 && nextC<N) {
                if(!visited[nextR][nextC] && map[nextR][nextC] > height) {
                    dfs(nextR, nextC);
                }
            }
        }
    }
    
    int main(int argc, const char * argv[]) {
        scanf("%d", &N);
        
        input();
        
        for(int h=0; h<=100; h++) {
            height = h;
            cnt = 0;
            reset();
            for(int i=0; i<N; i++) {
                for(int j=0; j<N; j++) {
                    if(!visited[i][j] && map[i][j] > height) {
                        cnt++;
    //                    printf("i: %d, j: %d, ans: %d\n",i, j, ans );
                        dfs(i, j);
                    }
                }
            }
            cnt > ans ? ans = cnt : ans;
        }
        
        printf("%d\n", ans);
        
        
        return 0;
    }
```


c++Algorithm Share Tweet +1