약간 까다로웠던 문제
cnt라는 변수를 만들어 가능or불가능을 따졌다.
cnt == 이때까지 연속된 높이의 칸 숫자
를 의미하며 cnt>=L이면 오르막길을 만들 수 있는 충분한 공간이 된다.
다음 칸이 현재 칸보다 높이가 1 낮으면 cnt = -L + 1로 설정한다.
이건 앞으로 -L + 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 | #include <stdio.h> int n, l, a[101][101], dx[] = { 0,0,1,-1 }, dy[] = { 1,-1,0,0 }, ans; int main() { scanf("%d%d", &n, &l); int i, j; for (i = 0; i < n; i++) for (j = 0; j < n; j++) scanf("%d", &a[i][j]); for (i = 0; i < n; i++) { int cnt = 1; for (j = 0; j < n - 1; j++) { if (a[i][j] == a[i][j + 1]) cnt++; else if (a[i][j] + 1 == a[i][j + 1] && cnt >= l) cnt = 1; else if (a[i][j] - 1 == a[i][j + 1] && cnt >= 0) cnt = -l + 1; else break; } if (j == n - 1 && cnt >= 0) ans++; cnt = 1; for (j = 0; j < n - 1; j++) { if (a[j][i] == a[j + 1][i]) cnt++; else if (a[j][i] + 1 == a[j + 1][i] && cnt >= l) cnt = 1; else if (a[j][i] - 1 == a[j + 1][i] && cnt >= 0) cnt = -l + 1; else break; } if (j == n - 1 && cnt >= 0) ans++; } printf("%d\n", ans); return 0; } | cs |
'BOJ' 카테고리의 다른 글
13226 Divisors Again (0) | 2017.10.30 |
---|---|
14891 톱니바퀴 (0) | 2017.10.26 |
14889 스타트와 링크 (0) | 2017.10.26 |
14888 연산자 끼워넣기 (0) | 2017.10.26 |
14648 쿼리 맛보기 (0) | 2017.10.03 |