• toc {:toc}

๋ฌธ์ œ

ํ‘๋ฐฑ ์˜์ƒ์„ ์••์ถ•ํ•˜์—ฌ ํ‘œํ˜„ํ•˜๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋กœ ์ฟผ๋“œ ํŠธ๋ฆฌ(Quad Tree)๋ผ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค. ํฐ ์ ์„ ๋‚˜ํƒ€๋‚ด๋Š” 0๊ณผ ๊ฒ€์€ ์ ์„ ๋‚˜ํƒ€๋‚ด๋Š” 1๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ ์˜์ƒ(2์ฐจ์› ๋ฐฐ์—ด)์—์„œ ๊ฐ™์€ ์ˆซ์ž์˜ ์ ๋“ค์ด ํ•œ ๊ณณ์— ๋งŽ์ด ๋ชฐ๋ ค์žˆ์œผ๋ฉด, ์ฟผ๋“œ ํŠธ๋ฆฌ์—์„œ๋Š” ์ด๋ฅผ ์••์ถ•ํ•˜์—ฌ ๊ฐ„๋‹จํžˆ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ฃผ์–ด์ง„ ์˜์ƒ์ด ๋ชจ๋‘ 0์œผ๋กœ๋งŒ ๋˜์–ด ์žˆ์œผ๋ฉด ์••์ถ• ๊ฒฐ๊ณผ๋Š” โ€œ0โ€์ด ๋˜๊ณ , ๋ชจ๋‘ 1๋กœ๋งŒ ๋˜์–ด ์žˆ์œผ๋ฉด ์••์ถ• ๊ฒฐ๊ณผ๋Š” โ€œ1โ€์ด ๋œ๋‹ค. ๋งŒ์•ฝ 0๊ณผ 1์ด ์„ž์—ฌ ์žˆ์œผ๋ฉด ์ „์ฒด๋ฅผ ํ•œ ๋ฒˆ์— ๋‚˜ํƒ€๋‚ด์ง€๋ฅผ ๋ชปํ•˜๊ณ , ์™ผ์ชฝ ์œ„, ์˜ค๋ฅธ์ชฝ ์œ„, ์™ผ์ชฝ ์•„๋ž˜, ์˜ค๋ฅธ์ชฝ ์•„๋ž˜, ์ด๋ ‡๊ฒŒ 4๊ฐœ์˜ ์˜์ƒ์œผ๋กœ ๋‚˜๋ˆ„์–ด ์••์ถ•ํ•˜๊ฒŒ ๋˜๋ฉฐ, ์ด 4๊ฐœ์˜ ์˜์—ญ์„ ์••์ถ•ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ฐจ๋ก€๋Œ€๋กœ ๊ด„ํ˜ธ ์•ˆ์— ๋ฌถ์–ด์„œ ํ‘œํ˜„ํ•œ๋‹ค

https://www.acmicpc.net/JudgeOnline/upload/201007/qq.png

์œ„ ๊ทธ๋ฆผ์—์„œ ์™ผ์ชฝ์˜ ์˜์ƒ์€ ์˜ค๋ฅธ์ชฝ์˜ ๋ฐฐ์—ด๊ณผ ๊ฐ™์ด ์ˆซ์ž๋กœ ์ฃผ์–ด์ง€๋ฉฐ, ์ด ์˜์ƒ์„ ์ฟผ๋“œ ํŠธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ์••์ถ•ํ•˜๋ฉด โ€œ(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);
}