반응형
Input
10
0000000001
1110011100
0100101000
0100101000
1111111111
0000101000
0000001000
0010010000
1111110000
0010010001
3
100
111
100
Output
2
① 이중 for문으로 좌측 상단을 기준으로 잡아서
주어진 패턴과 일치하는지 확인합니다. (+ 이중 for문)
② 90°, 180°, 270° 회전한 모양에 대해서도 동일하게 수행해야 하므로
패턴을 90° 회전하면서 과정 ①을 3번 더 수행합니다.
#include <stdio.h>
const int MAX_M = 100 + 5;
const int MAX_P = 100 + 5;
int ans = 0;
int M, P;
int map[MAX_M][MAX_M];
int pattern[MAX_P][MAX_P], temp[MAX_P][MAX_P];
void rotate() {
for (int i = 0; i < P; ++i) {
for (int j = 0; j < P; ++j) {
temp[j][P - i - 1] = pattern[i][j];
}
}
for (int i = 0; i < P; ++i) {
for (int j = 0; j < P; ++j) {
pattern[i][j] = temp[i][j];
}
}
}
bool isEqual(int s, int e) {
for (int i = 0; i < P; ++i) {
for (int j = 0; j < P; ++j) {
if (pattern[i][j] != map[s + i][e + j])
return false;
}
}
return true;
}
int main() {
// freopen("input.txt", "r", stdin);
scanf("%d", &M);
for (int i = 0; i < M; ++i) {
for (int j = 0; j < M; ++j) {
scanf("%1d", &map[i][j]);
}
}
scanf("%d", &P);
for (int i = 0; i < P; ++i) {
for (int j = 0; j < P; ++j) {
scanf("%1d", &pattern[i][j]);
}
}
for (int r = 0; r < 4; r++) {
for (int i = 0; i < M - P + 1; ++i) {
for (int j = 0; j < M - P + 1; ++j) {
if (isEqual(i, j)) {
ans++;
}
}
}
rotate(); // 90도씩 회전
}
printf("%d\n", ans);
}
반응형
'PS 문제 풀이 > Jungol' 카테고리의 다른 글
[Jungol] 정올 3706 합이 0이 되는 연속구간 세기 (0) | 2021.02.28 |
---|---|
[Jungol] 정올 3136 const 구간의 합 구하기(2D) (0) | 2021.02.28 |
[Jungol] 정올 2097 지하철 (0) | 2021.02.27 |
[Jungol] 정올 1840 치즈 (2) | 2021.02.27 |
[Jungol] 정올 1106 장기 (0) | 2021.02.27 |
댓글