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, false, sizeof(check)); int temp = solve(i); if (temp > ans) ans = temp; } printf("%d\n", ans); return 0; } | cs |
실수하기 딱 좋은 문제!
반드시 "비가 안오는 경우"도 고려해야 한다!!!
처음에는 지역의 높이를 입력받을 때 가장 낮은 높이와 가장 높은 높이를 따로 입력받아
그 사이에서만 for문을 돌렸는데 그렇게 하면 안되고
비를 기준으로 !! for문을 돌려야 한다.
백준 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
머신러닝/딥러닝 관련 글을 포스팅할 예정입니다 :)