반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- boj #19237 #어른 상어
- OFFSET
- 13908
- 오퍼레터
- upper_bound
- 성적평가
- Docker
- 파라메트릭
- @P0
- 처우협의
- 소프티어
- 매개변수탐색
- 백준
- 6987
- dfs
- 기술면접
- 물채우기
- incr
- softeer
- compose
- Kafka
- 처우산정
- 경력
- BOJ
- 퇴사통보
- 이분탐색
- 백트래킹
- BFS
- msSQL
- 연결요소
Archives
- Today
- Total
기술 블로그
14890번 경사로 본문
728x90
반응형
https://www.acmicpc.net/problem/14890
오랜만에 다시 풀어보았는데 오래 걸렸다.
변명하자면, 사실 방문 처리를 안 하고 풀려고 했었다.
그런데 계속 안 풀리길래 그냥 방문 처리 배열을 사용하였다.
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 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 | #include <bits/stdc++.h> using namespace std; int N, L, Map[101][101]; bool visit[101][101][2]; int check() { int ret = 0; for (int r = 0; r < N; r++) { int bf = 0; bool make = true; for (int c = 0; c < N; c++) { if (!c) { bf = Map[r][c]; continue; } if (Map[r][c] - bf > 0) // 증가 { if (Map[r][c] - bf > 1) { make = false; break; } for (int i = c - 1; i > c - L - 1; i--) { if (i < 0 || visit[r][i][0] || Map[r][c - 1] != Map[r][i]) { make = false; break; } visit[r][i][0] = true; } } else if (Map[r][c] - bf < 0) // 감소 { if (Map[r][c] - bf < -1) { make = false; break; } for (int i = c; i < c + L; i++) { if ( i > N || visit[r][i][0] || Map[r][c] != Map[r][i]) { make = false; break; } visit[r][i][0] = true; } c += (L - 1); } if (!make) break; bf = Map[r][c]; } if (make) ++ret; } for (int c = 0; c < N; c++) { int bf = 0; bool make = true; for (int r = 0; r < N; r++) { if (!r) { bf = Map[r][c]; continue; } if (Map[r][c] - bf > 0) // 증가 { if (Map[r][c] - bf > 1) { make = false; break; } for (int i = r - 1; i > r - L - 1; i--) { if (i < 0 || visit[i][c][1] || Map[r - 1][c] != Map[i][c]) { make = false; break; } visit[i][c][1] = true; } } else if (Map[r][c] - bf < 0) // 감소 { if (Map[r][c] - bf < -1) { make = false; break; } for (int i = r; i < r + L; i++) { if (i > N || visit[i][c][1] || Map[r][c] != Map[i][c]) { make = false; break; } visit[i][c][1] = true; } r += (L - 1); } if (!make) break; bf = Map[r][c]; } if (make) ++ret; } return ret; } int main(void) { scanf("%d %d", &N, &L); for (int i = 0; i < N; i++) for (int j = 0; j < N; j++) scanf("%d", &Map[i][j]); printf("%d\n", check()); return 0; } | cs |
728x90
반응형
'알고리즘 문제 > BOJ' 카테고리의 다른 글
17136번 색종이 붙이기 (0) | 2019.09.07 |
---|---|
9370번 미확인 도착지 (0) | 2019.08.27 |
2792번 보석 상자 (0) | 2019.08.21 |
1173번 운동 (0) | 2019.08.20 |
17250번 은하철도 (0) | 2019.08.19 |