# 생각
범위 안의 원소가 모두 똑같은지 탐색한다
일치하면 출력하고 탈출하는 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
'Algorithm > BOJ' 카테고리의 다른 글
[BOJ] 2448_별 찍기 - 11 with cpp (0) | 2022.01.30 |
---|---|
[BOJ] 2447_별 찍기 - 10 with cpp (0) | 2022.01.29 |
[BOJ] 1780_종이의 개수 with cpp (0) | 2022.01.28 |
[BOJ] 2630_색종이 만들기 with cpp (0) | 2022.01.28 |
[BOJ] 17478_재귀함수가 뭔가요? with cpp (0) | 2022.01.27 |