가로, 세로 각각에 대해 0~N-1 까지 탐색을 해준다!!
각각의 행렬에 대해 0부터 진행해 나간다.
진행해 나가면서 다음 칸의 높이와 현재 높이가 2이상 차이 나면 무시.
다음 칸의 높이가 낮으면, 다음 칸부터 L이 들어갈 수 있는지 따져준다.
다음 칸이 높이가 높으면, 현재 위치부터 지나온 길이에 L이 들어갈 수 있는지 따져준다.
이렇게 해주면 된다...중요한건!!!이미 경사로를 놓은 곳에 또 경사로를 놓으면 안 되니!! 배열 하나를 추가로 해서 체크해준다..완전 노가다...내가 보아도..정말 더럽고 비효율적인 코드....다른 사람의 풀이를 좀 봐야겠다!!
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 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 | #include <stdio.h> #include <string.h> int map[100][100]; int N, L; int main() { scanf("%d %d",&N, &L); for (int a = 0; a < N; a++) { for (int b = 0; b < N; b++) { scanf("%d",&map[a][b]); } } int Flag, count=0; for (int a = 0; a < N; a++) { int arr[100] = { 0, }; for (int b = 0; b < N - 1; b++)//가로 { if (map[a][b] - map[a][b + 1] == 1) { Flag = 0; for (int c = 0; c < L; c++) { if (arr[b + 1 + c] == 1 || b + 1 + c >= N||map[a][b + 1] != map[a][b + 1 + c]) { Flag = 1; break; } arr[b + 1 + c] = 1; } if (Flag) break; b = b + L - 1; } else if (map[a][b] - map[a][b + 1] == -1) { Flag = 0; for (int c = 0; c < L; c++) { if (arr[b - c] == 1 || b - c < 0 ||map[a][b] != map[a][b - c]) { Flag = 1; break; } arr[b - c] = 1; } if (Flag) break; } else if (map[a][b] - map[a][b + 1] > 1 || map[a][b] - map[a][b + 1] < -1) { break; } if (b == N - 2) { count++; } } memset(arr, 0, sizeof(arr)); for (int b = 0; b < N - 1; b++)//세로 { if (map[b][a] - map[b + 1][a] == 1) { Flag = 0; for (int c = 0; c < L; c++) { if (arr[b + 1 + c] == 1|| b + 1 + c >= N||(map[b + 1][a] != map[b + 1 + c][a])) { Flag = 1; break; } arr[b + 1 + c] = 1; } if (Flag) break; b = b + L - 1; } else if (map[b][a] - map[b + 1][a] == -1) { Flag = 0; for (int c = 0; c < L; c++) { if (arr[b - c] == 1 || b - c < 0 || (map[b][a] != map[b-c][a])) { Flag = 1; break; } arr[b - c] = 1; } if (Flag) break; } else if (map[b][a] - map[b + 1][a] > 1 || map[b][a] - map[b + 1][a] < -1) { break; } if (b == N - 2) { count++; } } } printf("%d\n",count); return 0; } | cs |
'SW 업무 관련 > 백준' 카테고리의 다른 글
[C언어] 15686. 치킨배달 (0) | 2018.09.25 |
---|---|
[C언어] 14889 스타트와 링크 (0) | 2018.09.25 |
[C언어] 14891. 톱니바퀴 (0) | 2018.09.24 |
[C언어] 25686 치킨 배달. (0) | 2018.09.24 |
[C언어] 6593 상범 빌딩 (0) | 2018.09.24 |