Algorithm/BOJ
[c++][BOJ][1992] 쿼드트리
kim-hasa
2022. 3. 2. 13:49
https://www.acmicpc.net/problem/1992
1992번: 쿼드트리
첫째 줄에는 영상의 크기를 나타내는 숫자 N 이 주어진다. N 은 언제나 2의 제곱수로 주어지며, 1 ≤ N ≤ 64의 범위를 가진다. 두 번째 줄부터는 길이 N의 문자열이 N개 들어온다. 각 문자열은 0 또
www.acmicpc.net
이전에 풀었던 색종이 문제들이랑 비슷한 문제입니다.
다만 순서에 조금 신경써야 한다는 점 ??
똑같이 같으면 문자열에 추가하고 , 아니면 나눕니다.
나눌 때 , 괄호가 들어가므로 앞뒤에 괄호만 삽입해주면 됩니다.
#include <iostream>
#include <string>
using namespace std;
int arr[64][64] = {0};
string ans = "";
void find(int x, int y, int index){
int start = arr[x][y];
bool check = true;
for(int i=x; i< x+index; i++){
for(int j=y; j< y+ index; j++){
if(arr[i][j] != start){
check = false;
break;
}
}
}
if(check == false){
ans += "(";
for(int i=x; i< x+index; i += index/2){
for(int j=y; j< y + index; j+= index/2){
find(i, j, index/2);
}
}
ans += ")";
}
else {
ans += to_string(start);
}
}
int main(){
int n;
cin >> n;
for(int i=0; i<n; i++){
string str;
cin >> str;
for(int j=0; j<n; j++){
char c = str[j];
arr[i][j] = c - '0';
}
}
find(0 , 0, n);
cout << ans;
}