Algorithm/BOJ

[c++][BOJ][1992] 쿼드트리

kim-hasa 2022. 3. 2. 13:49

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

 

1992번: 쿼드트리

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

www.acmicpc.net

이전에 풀었던 색종이 문제들이랑 비슷한 문제입니다.

 

다만 순서에 조금 신경써야 한다는 점 ??

 

똑같이 같으면 문자열에 추가하고 , 아니면 나눕니다.

 

나눌 때 , 괄호가 들어가므로 앞뒤에 괄호만 삽입해주면 됩니다.

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

int arr[64][64] = {0};
string ans = "";

void find(int x, int y, int index){
    int start = arr[x][y];
    bool check = true;
    
    for(int i=x; i< x+index; i++){
        for(int j=y; j< y+ index; j++){
            if(arr[i][j] != start){
                check = false;
                break;
            }
        }
    }
    
    if(check == false){
        ans += "(";
        
        for(int i=x; i< x+index; i += index/2){
            for(int j=y; j< y + index; j+= index/2){
                find(i, j, index/2);
            }
        }
        
        ans += ")";
    }
    else {
        ans += to_string(start);
    }
    
}

int main(){
    int n;
    cin >> n;
    
    for(int i=0; i<n; i++){
        string str;
        cin >> str;
        
        for(int j=0; j<n; j++){
            char c = str[j];
            
            arr[i][j] = c - '0';
        }
    }
    
    find(0 , 0, n);
    
    cout << ans;
}