<링크>
https://www.acmicpc.net/problem/14890
<풀이>
시키는 대로 하면된다.
문제에 나와있는 조건을 구현하는데
모든 행을 쭉 봐야하고 모든 열을 또 봐야하기 때문에 처음부터 2차원 배열을 두 개를 만들었다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | for(int i=0;i<N;++i) for (int j = 0; j < N; ++j) { int n; scanf("%d", &n); h[i][j] = v[j][i] = n; } ..... for (int i = 0; i < N; ++i) { ans += isValid(h[i]); ans += isValid(v[i]); } | cs |
가로방향, 세로방향을 한번에 입력해놓고 각 행의 주소를 포인터 인자로 넘겨줘서 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 | #include<stdio.h> int h[100][100]; int v[100][100]; int N, L; int isValid(int *); int main() { scanf("%d%d", &N, &L); for(int i=0;i<N;++i) for (int j = 0; j < N; ++j) { int n; scanf("%d", &n); h[i][j] = v[j][i] = n; } int ans = 0; for (int i = 0; i < N; ++i) { ans += isValid(h[i]); ans += isValid(v[i]); } printf("%d", ans); } int isValid(int *p) { int installed[100] = { 0, }; for (int i = 1; i < N; ++i) { if (p[i - 1] < p[i]) { if (i - L < 0) return 0; int height = p[i]-1; for (int j = i - 1; j >= i - L; --j) if (height != p[j] || installed[j]) return 0; for (int j = i - 1; j >= i - L; --j) installed[j] = 1; } else if (p[i - 1] > p[i]) { if (i + L-1>= N) return 0; int height = p[i - 1]-1; for (int j = i; j < i + L; ++j) if (height != p[j] || installed[j]) return 0; for (int j = i; j < i + L; ++j) installed[j] = 1; } } return 1; } | cs |
'알고리즘 풀이 > 시뮬레이션' 카테고리의 다른 글
백준 15685 드래곤커브 (0) | 2018.09.30 |
---|---|
백준 14499 주사위굴리기 :: 들짐승 (0) | 2018.07.22 |
백준 3190 뱀 :: 들짐승 (0) | 2018.07.22 |
백준 12100 2048(Easy) :: 들짐승 (0) | 2018.07.22 |