BOJ::14890 경사로
https://www.acmicpc.net/problem/14890
딱히 알고리즘이 필요한거 같진 않고 조건을주고 조건을 통과할때만 다음칸으로 넘어 갈 수 있도록 했다.
또한 경사로를 놓는 경우에 visited 배열에 체크를 해주면서 경사로가 중복되어 설치되지 않도록 하였다.
그리고 하나는 하나는 행에+1, 하나는 열에+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 | #include <stdio.h> #include <memory.h> int n, l, res; int map[100][100]; bool visited[100]; void isVertical(int r, int c) { if (r == n - 1) { res++; return; } if (map[r][c] == map[r+1][c]) { isVertical(r+1, c); } else if (map[r][c] == map[r+1][c] - 1) { if (r - l + 1 < 0) { return; } for (int i = 0; i < l; i++) { if (!visited[r - i]) { visited[r - i] = true; } else return; } isVertical(r+1, c); } else if (map[r][c] == map[r+1][c] + 1) { if (r + l > n - 1) { return; } for (int i = 1; i <= l; i++) { if (!visited[r + i] && map[r][c]==map[r + i][c] + 1) { visited[r + i] = true; } else return; } isVertical(r+l, c); } } void isHorizontal(int r,int c) { if (c == n - 1) { res++; return; } if (map[r][c] == map[r][c + 1]) { isHorizontal(r, c + 1); } else if (map[r][c] == map[r][c + 1] - 1) { if (c - l + 1 < 0) { return; } for (int i = 0; i < l; i++) { if (!visited[c-i]) { visited[c-i] = true; } else return; } isHorizontal(r, c + 1); } else if (map[r][c] == map[r][c + 1] + 1) { if (c + l > n - 1) { return; } for (int i = 1; i <= l; i++) { if (!visited[c + i] && map[r][c] == map[r][c + i] + 1) { visited[c + i] = true; } else return; } isHorizontal(r, c + l); } } int main() { scanf("%d %d", &n, &l); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { scanf("%d", &map[i][j]); } } for (int i = 0; i < n; i++) { memset(visited, 0, sizeof(visited)); isVertical(0, i); memset(visited, 0, sizeof(visited)); isHorizontal(i, 0); } printf("%d\n", res); } | cs |
'BOJ::문제풀이' 카테고리의 다른 글
14891 톱니바퀴 (0) | 2018.01.28 |
---|---|
14503 로봇 청소기 (0) | 2018.01.28 |
14502 연구소 (0) | 2018.01.27 |
1520 내리막 길 (0) | 2018.01.27 |
2302 극장좌석 (0) | 2018.01.27 |