요건 백준 14890 경사로랑 동일하다. 각각의 세로 가로에 대해 판단을 해주어야 한다.
1. 현재 높이와 다음 칸의 높이가 -1
cnt는 높이가 연속된 배열의 길이이다. 이건 앞으로 가야하는데 높이가 1차이 나는 곳을 위해 경사로를 설치하기 위함이다. 현재 앞칸과 높이가 1이고, cnt가 x보다 길면 다음 칸으로 나아갈 수 있으며, cnt는 초기화된다.
2. 현재 높이와 다음 칸의 높이가 1
현재 높이가 다음 칸보다 1보다 높은 경우, 다음 칸부터 길이 x만큼 평지 인지를 판단해주면 된다. 이때 주의할게 경사로 설치 기준이 만족하면, cnt=-1, j+=(x-1)로 설정을 해주어야한다. j+=x로 할 경우 for문을 거치면서 j++가 되어, j+x 와 j+x+1을 비교해주지 않고 넘어가게 된다. 그리고 j를 x-1만큼 이동을 하였다. 이때 0으로 초기화해주면 경사로가 위치한 자리임에도 cnt++이 되어 cnt가 0이어야 함에도 1이 되어 오답이 발생한다.
3. 현재 높이와 다음칸의 높이가 -1, 0, 1이 아니면 탐색 정지.
아...글로 설명하기 너무 어렵다.
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 | #include <stdio.h> #include <string.h> int main() { int Test_Case; scanf("%d", &Test_Case); for (int T = 1; T <= Test_Case; T++) { int Total = 0, N, X; int map[20][20] = {0,}; scanf("%d %d", &N, &X); for (int i = 0; i < N; i++) for (int j = 0; j < N; j++) scanf("%d", &map[i][j]); int cnt = 0, num = 0, Flag = 0; for (int i = 0; i < N; i++) { //가로 cnt = 0; for (int j = 0; j < N - 1; j++) { cnt++; num = map[i][j] - map[i][j + 1]; if (num == 1) { Flag = 0; for (int a = 0; a < X; a++) { if (j + 1 + a >= N || map[i][j + 1] != map[i][j + 1 + a]) { Flag = 1; break; } } if (Flag) break; j += (X - 1); cnt = 0; } else if (num == -1) { if (cnt >= X) cnt = 0; else break; } else if (num > 1 || num < -1) { break; } if (j == N - 2) { printf("X : %d \n", i); Total++; } } //세로 cnt = 0; for (int j = 0; j < N - 1; j++) { cnt++; num = map[j][i] - map[j + 1][i]; if (num == 1) { Flag = 0; for (int a = 0; a < X; a++) { if (j + 1 + a >= N || map[j + 1][i] != map[j + 1 + a][i]) { Flag = 1; break; } } if (Flag) break; j += (X - 1); cnt = 0; } else if (num == -1) { if (cnt >= X) cnt = 0; else break; } else if (num > 1 || num < -1) { break; } if (j == N - 2 ) { printf("Y : %d \n", i); Total++; } } } printf("#%d %d\n", T, Total); } return 0; } | cs |
'SW 업무 관련 > SW Expert Academy' 카테고리의 다른 글
2115. [모의 SW 역량테스트] 벌꿀채취 (0) | 2018.10.07 |
---|---|
2105. [모의 SW 역량테스트] 디저트 카페 (0) | 2018.10.05 |
4008. [모의 SW 역량테스트] 숫자 만들기 (0) | 2018.10.03 |
4013. [모의 SW 역량테스트] 특이한 자석 (0) | 2018.10.03 |
4012. [모의 SW 역량테스트] 요리사 (0) | 2018.10.03 |