해설은 익스퍼트의 해설을 보시길....
하.............나는 멀었다...............ㅜ,ㅠ해설을 봐버렸어ㅜ,ㅠ
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 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 | #include <stdio.h> #include <string.h> typedef struct { int x; int y; }MAX; MAX arr[5]; int map[8][8]; int visit[8][8]; int max_len; int Flag; int dx[] = { 0,0,-1,1 }; int dy[] = { 1,-1,0,0 }; int N, K; void search(int y, int x, int len) { if (visit[y][x]) return; if (len > max_len) max_len = len; visit[y][x] = 1; for (int i = 0; i < 4; i++) { int yy = y + dy[i]; int xx = x + dx[i]; if (yy < 0 || xx < 0 || xx >= N || yy >= N) continue; if (map[yy][xx] < map[y][x]) { search(yy, xx, len + 1); } else if ((map[yy][xx] >= map[y][x]) && Flag == 0) { if (map[yy][xx] - K < map[y][x]) { Flag = 1; int temp = map[yy][xx]; map[yy][xx] = map[y][x] - 1; search(yy, xx, len + 1); map[yy][xx] = temp; Flag = 0; } } } visit[y][x] = 0; return; } int main() { int Test; scanf("%d",&Test); for (int i = 1; i <= Test; i++) { memset(arr, 0, sizeof(arr)); memset(map, 0, sizeof(map)); memset(visit, 0, sizeof(visit)); int max=0; max_len = 0; Flag = 0; scanf("%d %d", &N, &K); for (int a = 0; a < N; a++) { for (int b = 0; b < N; b++) { scanf("%d", &map[a][b]); if (map[a][b]>max) max = map[a][b]; } } int num = 0; for (int a = 0; a < N; a++) { for (int b = 0; b < N; b++) { if (map[a][b] == max) { search(a, b, 1); } } } printf("#%d %d\n", i, max_len); } return 0; } | cs |
'SW 업무 관련 > SW Expert Academy' 카테고리의 다른 글
5656. [모의 SW 역량테스트] 벽돌 깨기 (1) | 2018.09.29 |
---|---|
5650. [모의 SW 역량테스트] 핀볼 게임 (0) | 2018.09.23 |
1859. 백만 장자 프로젝트 (0) | 2018.08.08 |
1952. [모의 SW 역량테스트] 수영장 (0) | 2018.08.05 |
[S/W 문제해결 기본] 5일차 - GNS (0) | 2018.08.05 |