# 생각

범위 안의 원소가 모두 똑같은지 탐색한다

일치하면 출력하고 탈출하는 base condition, 일치하지 않으면 4등분 하는 재귀식을 작성한다

 

 

# 전체 코드

#include <bits/stdc++.h>
using namespace std;
// 제한 : 2초, 128MB
// N = 1~64
string coord[64];
// coord 범위 안에 원소가 모두 다 똑같은지 확인한다
bool Check(int n, int x, int y)
{
	for (int i = x; i < x+n; i++)
	{
		for (int j = y; j < y+n; j++)
		{
			if (coord[i][j] != coord[x][y])
			{
				return false;
			}
		}
	}
	return true;
}
// 일치하면 출력, 일치하지 않으면 4등분하는 재귀
void quadRecursive(int n, int x, int y)
{
	if (Check(n, x, y))
	{
		cout << coord[x][y];
		return;
	}
	cout << '(';
	int divide = n * 0.5;
	for (int i = 0; i < 2; i++)
	{
		for (int j = 0; j < 2; j++)
		{
			quadRecursive(divide, x + i * divide, y + j * divide);
		}
	}
	cout << ')';
}

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(nullptr);

	int N;
	cin >> N;
	for (int i = 0; i < N; i++)
	{
		cin >> coord[i];
	}
	quadRecursive(N, 0, 0);
}

 


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

 

1992번: 쿼드트리

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

www.acmicpc.net

+ Recent posts