์ค๋ฒ1 : ๊ตฌํ ๋ฌธ์ ์ด๋ค.
๋๋ฌด ์ง์ฆ๋๋ค. ๋ฌธ์  ์ ๋๋ก ์ฝ์ด. ์ ๋ฐ์ ๋ฐ์ ญ๋ผ..
- ๋ฑ์ด ์ง๋๊ฐ๋ ๊ฒฝ๋ก๋ฅผ ์ก์์ค ์๋ฃ๊ตฌ์กฐ
- map์ ํ์ํด์ ๊ฐ ์ ์๋์ง ์๋์ง ์์์ผ ํ๋ค.
 - tail์ ์์น๋ฅผ trackingํ ์ ์์ด์ผ ํ๋ค. โ queue
 
 - ์๊ฐ
 - ํ์ฌ ๋ณด๊ณ ์๋ ๋ฐฉํฅ
 - ๋ฐฉํฅ์ ๋ฐ๋ฅธ ์ฐํ์  ์ขํ์ 
 - action์ ์๋ ค์ค ๋ฐฉํฅ
 
Code
//
//  main.cpp
//  algorithm_prac
//
//  Created by ์ต์์ on 2021/04/05.
//
 
#include <iostream>
#include <vector>
using namespace std;
int N;
int map[64][64];
vector<char> ans;
 
void go(int sy, int sx, int d){
    int setN = map[sy][sx];
    int flag = 0;
    for (int i = sy; i < sy+d; i++) {
        for (int j = sx; j < sx+d; j++) {
            if (setN != map[i][j]) {
                flag = -1;
                break;
            }
        }
        if (flag == -1) break;
    }
    
    if (flag == 0) ans.push_back(setN + '0');
    else {
        ans.push_back('(');
        
        go(sy, sx, d/2);
        go(sy, sx+d/2, d/2);
        go(sy+d/2, sx, d/2);
        go(sy+d/2, sx+d/2, d/2);
        
        ans.push_back(')');
    }
}
 
int main(){
    cin >> N;
    for (int i = 0; i < N; i++) {
        char temp[64];
        cin >> temp;
        for (int j = 0; j < N; j++) {
            map[i][j] = temp[j] - '0';
        }
    }
 
    go(0, 0, N);
    for (int i = 0; i < int(ans.size()); i++) {
        cout << ans[i];
    }
    return 0;
}