본문으로 바로가기

백준 01992 - 쿼드트리

category BOJ 백준/Divide & Conquer 2020. 11. 8. 01:49

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

 

1992번: 쿼드트리

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

www.acmicpc.net

 

고려사항

  • 2630 번 문제와 유사
  • 압축이 안되어서 4분할을 할 시에는 앞, 뒤에 ( ) 추가
  • 2630 번 처럼 n == 1 인 상황 예외 처리 x
    2630 은 비교 대상이 인자로 넘겨 받은 값이라 n이 1이어도 isComplete 아닐 수 있지만,
    위 문제는 비교 대상이 n이 1이라면 그 원소 자체이기 때문에 무조건 isComplete 이다!

 

#include <iostream>
#include <string>
using namespace std;

char video[64][64];

string divide(int y, int x, int n){
    string str;
    bool isComplete = true;

    char target = video[y][x];
    for(int i=0;i<n;++i){
        for(int j=0;j<n;++j){
            if(video[y+i][x+j] != target){
                isComplete = false;
                break;
            }
        }
    }

    if(isComplete){
        str.push_back(target);
        return str;
    }

    str.append("(");
    for(int i=0;i<2;++i){
        for(int j=0;j<2;++j){
            str.append(divide((y+i*n/2), (x+j*n/2), n/2));
        }
    }
    str.append(")");
    return str;
}

int main() {
    int n;

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

    string ans = divide(0,0,n);
    cout<<ans;
    return 0;
}

'BOJ 백준 > Divide & Conquer' 카테고리의 다른 글

백준 11444 - 피보나치 수 6  (0) 2020.11.11
백준 01629 - 곱셈  (0) 2020.11.11
백준 01780 - 종이의 개수  (0) 2020.11.11
백준 02630 - 색종이 만들기  (0) 2020.11.08