- toc {:toc}
๋ฌธ์
ํ๋ฐฑ ์์์ ์์ถํ์ฌ ํํํ๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ก ์ฟผ๋ ํธ๋ฆฌ(Quad Tree)๋ผ๋ ๋ฐฉ๋ฒ์ด ์๋ค. ํฐ ์ ์ ๋ํ๋ด๋ 0๊ณผ ๊ฒ์ ์ ์ ๋ํ๋ด๋ 1๋ก๋ง ์ด๋ฃจ์ด์ง ์์(2์ฐจ์ ๋ฐฐ์ด)์์ ๊ฐ์ ์ซ์์ ์ ๋ค์ด ํ ๊ณณ์ ๋ง์ด ๋ชฐ๋ ค์์ผ๋ฉด, ์ฟผ๋ ํธ๋ฆฌ์์๋ ์ด๋ฅผ ์์ถํ์ฌ ๊ฐ๋จํ ํํํ ์ ์๋ค.
์ฃผ์ด์ง ์์์ด ๋ชจ๋ 0์ผ๋ก๋ง ๋์ด ์์ผ๋ฉด ์์ถ ๊ฒฐ๊ณผ๋ โ0โ์ด ๋๊ณ , ๋ชจ๋ 1๋ก๋ง ๋์ด ์์ผ๋ฉด ์์ถ ๊ฒฐ๊ณผ๋ โ1โ์ด ๋๋ค. ๋ง์ฝ 0๊ณผ 1์ด ์์ฌ ์์ผ๋ฉด ์ ์ฒด๋ฅผ ํ ๋ฒ์ ๋ํ๋ด์ง๋ฅผ ๋ชปํ๊ณ , ์ผ์ชฝ ์, ์ค๋ฅธ์ชฝ ์, ์ผ์ชฝ ์๋, ์ค๋ฅธ์ชฝ ์๋, ์ด๋ ๊ฒ 4๊ฐ์ ์์์ผ๋ก ๋๋์ด ์์ถํ๊ฒ ๋๋ฉฐ, ์ด 4๊ฐ์ ์์ญ์ ์์ถํ ๊ฒฐ๊ณผ๋ฅผ ์ฐจ๋ก๋๋ก ๊ดํธ ์์ ๋ฌถ์ด์ ํํํ๋ค

์ ๊ทธ๋ฆผ์์ ์ผ์ชฝ์ ์์์ ์ค๋ฅธ์ชฝ์ ๋ฐฐ์ด๊ณผ ๊ฐ์ด ์ซ์๋ก ์ฃผ์ด์ง๋ฉฐ, ์ด ์์์ ์ฟผ๋ ํธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ด์ฉํ์ฌ ์์ถํ๋ฉด โ(0(0011)(0(0111)01)1)โ๋ก ํํ๋๋ค.ย N รN ํฌ๊ธฐ์ ์์์ด ์ฃผ์ด์ง ๋, ์ด ์์์ ์์ถํ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์๋ ์์์ ํฌ๊ธฐ๋ฅผ ๋ํ๋ด๋ ์ซ์ N ์ด ์ฃผ์ด์ง๋ค. N ์ ์ธ์ ๋ 2์ ์ ๊ณฑ์๋ก ์ฃผ์ด์ง๋ฉฐ, 1 โค N โค 64์ ๋ฒ์๋ฅผ ๊ฐ์ง๋ค. ๋ ๋ฒ์งธ ์ค๋ถํฐ๋ ๊ธธ์ด N์ ๋ฌธ์์ด์ด N๊ฐ ๋ค์ด์จ๋ค. ๊ฐ ๋ฌธ์์ด์ 0 ๋๋ 1์ ์ซ์๋ก ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ, ์์์ ๊ฐ ์ ๋ค์ ๋ํ๋ธ๋ค.
์ถ๋ ฅ
์์์ ์์ถํ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ค.
์ถ์ฒ: https://www.acmicpc.net/problem/1992
ํ์ด
2630: ์์ข ์ด ๋ง๋ค๊ธฐ, 1780: ์ข ์ด์ ๊ฐ์์ ํ์ ๊ฐ๋ค. ์กฐ๊ฐ์ผ๋ก ๋๋ ๊ฐ๋ฉด์ ์ฌ๊ทํจ์๋ฅผ ๋๋ฆฌ๊ธฐ ๋๋ฌธ. ์ธ๋ฑ์ค์ ์ ์ํ๋ค.
- ์ด๋ฒ ๋ฌธ์ ๋ ๊ดํธ๋ฅผ ์ด๋์ ๋ฃ๋๊ฐ๋ฅผ ๊ณ ๋ฏผํด๋ณผ ํ์๊ฐ ์๋ค.
- ํ์ง๋ง ์ด ๋ํ ๊ท๋ฉ์ ์ผ๋ก n=1, n=k๋ฅผ ์๊ฐํด๋ณด๋ฉด ๋ต์ด ๋์จ๋ค.
#include <bits/stdc++.h>
using namespace std;
char board[66][66];
vector<int> vec;
void func(char board[66][66], int n, int x, int y){
int is_same = 1;
if(n==1) {
cout << board[x][y];
return;
}
for(int i=x; i < x+n; i++)
for(int j=y; j < y+n; j++){
if(board[x][y]==board[i][j]) continue;
is_same=0;
break;
}
if(is_same){
cout << board[x][y];
return;
}
cout << '(';
// 4๋ฐฉํฅ์ผ๋ก ๋๋๋ ๊ณผ์ ์ด ์๋ for๋ฌธ์ด๋ฏ๋ก ๋ฐ๊นฅ์ ๊ดํธ๋ฅผ ๋ฃ์ด์ผ ํจ.
for(int i=x; i < x+n; i += n/2)
for(int j=y; j < y+n; j += n/2)
func(board, n/2, i, j);
cout << ')';
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
int n;
cin >> n;
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++)
cin >> board[i][j];
func(board, n, 0, 0);
}