알고리즘

[백준/분할정복/C++] 1992번 쿼드트리

데메즈 2023. 1. 5. 15:37
728x90
반응형

https://www.acmicpc.net/problem/1992

 

1992번: 쿼드트리

첫째 줄에는 영상의 크기를 나타내는 숫자 N 이 주어진다. N 은 언제나 2의 제곱수로 주어지며, 1 ≤ N ≤ 64의 범위를 가진다. 두 번째 줄부터는 길이 N의 문자열이 N개 들어온다. 각 문자열은 0 또

www.acmicpc.net

문제가 처음에는 이해가 안됐는데 아래처럼 풀면 된다

분할정복을 사용하면 된다

#include <bits/stdc++.h>

using namespace std;

int n;
string mapp[64];

bool check(int x, int y, int n){

    for(int i=0; i<n; i++){
        for(int j=0; j<n; j++){
            if(mapp[x+i][y+j] != mapp[x][y])
                return false;
        }
    }
    return true;
}

void divide(int x, int y, int n){
    if(check(x,y,n)){
        cout << mapp[x][y];
        return;
    }
    int div = n/2;
    cout << '(';
    for(int i=0; i<2; i++){
        for(int j=0; j<2; j++){
            divide(x+div*i, y+div*j, div);
        }
    }
    cout << ')';
}

int main(void) {
    ios::sync_with_stdio(0);
    cin.tie(0);

    cin >> n;

    for(int i=0; i<n; i++){
        cin >> mapp[i];
    }

    divide(0, 0, n);

    return 0;
}
비슷한 문제

https://develop-me-z.tistory.com/126

 

[백준/분할정복/C++] 1780번 종이의 개수

https://www.acmicpc.net/problem/1780 1780번: 종이의 개수 N×N크기의 행렬로 표현되는 종이가 있다. 종이의 각 칸에는 -1, 0, 1 중 하나가 저장되어 있다. 우리는 이 행렬을 다음과 같은 규칙에 따라 적절한

develop-me-z.tistory.com

 

728x90
반응형