BOJ 14890: 경사로 작성일 2020-02-13 https://www.acmicpc.net/problem/14890 2월동안 187문제 풀기(지난달 누적 87개) (17/187) 경사로를 놓는 조건이 생각보다 까다로운 편. 실수하지 않고 생각한 것을 한번에 딱 구현하는 연습을 해야함. 12345678910111213141516171819202122232425262728293031323334353637#include <bits/stdc++.h> using namespace std; int N, L, arr[101][101], ans; int bound(int n) { return n >= 0 && n < N; } int go(int x, int y, int dx, int dy) { int prev = -1, accu = 0, debt = 0; while(bound(x) && bound(y)) { int cur = arr[x][y]; x += dx, y += dy; if(prev == -1) prev = cur, accu++; else if (prev == cur && debt) debt--; else if (prev == cur && !debt) accu++; else if (debt) return 0; else if (prev+1 == cur && accu >= L) prev = cur, accu = 1; else if (prev-1 == cur) prev = cur, accu = 0, debt = L-1; else return 0; } return debt ? 0 : 1; } int main() { cin >> N >> L; for(int i = 0; i < N; i++) for(int j = 0; j < N; j++) cin >> arr[i][j]; for(int i = 0; i < N; i++) { ans += go(i,0,0,1); ans += go(0,i,1,0); } cout << ans; }