백준 2468 안전 영역
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
// 20분
 
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <cstring>
using namespace std;
 
int n;
int map[101][101];
bool check[101][101];
 
int dx[] = { 1,-1,0,0 };
int dy[] = { 0,0,1,-1 };
 
void dfs(int row, int col, int height) {
    check[row][col] = true;
    for (int k = 0; k < 4; k++) {
        int nx = col + dx[k];
        int ny = row + dy[k];
        if (0 <= nx && nx < n && 0 <= ny && ny < n) {
            if (map[ny][nx] > height && !check[ny][nx]) {
                dfs(ny, nx, height);
            }
        }
    }
}
 
int solve(int height) {
    int cnt = 0;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            if (map[i][j] > height && !check[i][j]) {
                dfs(i, j, height);
                cnt += 1;
            }
        }
    }
    return cnt;
}
 
int main() {
    scanf("%d"&n);
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            scanf("%d"&map[i][j]);
        }
    }
    int ans = 0;
    for (int i = 0; i <= 100; i++) {
        memset(check, falsesizeof(check));
        int temp = solve(i);
        if (temp > ans) ans = temp;
    }
    printf("%d\n", ans);
    return 0;
}
cs




실수하기 딱 좋은 문제! 

반드시 "비가 안오는 경우"도 고려해야 한다!!! 



처음에는 지역의 높이를 입력받을 때 가장 낮은 높이와 가장 높은 높이를 따로 입력받아

그 사이에서만 for문을 돌렸는데 그렇게 하면 안되고

비를 기준으로 !! for문을 돌려야 한다.

'Algorithm' 카테고리의 다른 글

백준 11403 경로 찾기  (0) 2018.05.17
백준 11404 플로이드  (0) 2018.05.17
백준 11724 연결 요소의 개수  (0) 2018.05.17
백준 2667 단지번호붙이기  (0) 2018.05.17
백준 1012 유기농 배추  (0) 2018.05.17
더보기

댓글,

jayharvey

머신러닝/딥러닝 관련 글을 포스팅할 예정입니다 :)