본문 바로가기
PS 문제 풀이/Jungol

[Jungol] 정올 1437 같은 모양 찾기

by 까망 하르방 2021. 2. 28.
반응형

출처[Jungol] 정올 1437 같은 모양 찾기

 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);
}

 

반응형

댓글