출처 : https://www.acmicpc.net/problem/1992
1992번: 쿼드트리
첫째 줄에는 영상의 크기를 나타내는 숫자 N 이 주어진다. N 은 언제나 2의 제곱수로 주어지며, 1≤N ≤64의 범위를 가진다. 두 번째 줄부터는 길이 N 의 문자열이 N 개 들어온다. 각 문자열은 0 또는
www.acmicpc.net
고려사항
- 2630 번 문제와 유사
- 압축이 안되어서 4분할을 할 시에는 앞, 뒤에 ( ) 추가
- 2630 번 처럼 n == 1 인 상황 예외 처리 x
2630 은 비교 대상이 인자로 넘겨 받은 값이라 n이 1이어도 isComplete 아닐 수 있지만,
위 문제는 비교 대상이 n이 1이라면 그 원소 자체이기 때문에 무조건 isComplete 이다!
#include <iostream>
#include <string>
using namespace std;
char video[64][64];
string divide(int y, int x, int n){
string str;
bool isComplete = true;
char target = video[y][x];
for(int i=0;i<n;++i){
for(int j=0;j<n;++j){
if(video[y+i][x+j] != target){
isComplete = false;
break;
}
}
}
if(isComplete){
str.push_back(target);
return str;
}
str.append("(");
for(int i=0;i<2;++i){
for(int j=0;j<2;++j){
str.append(divide((y+i*n/2), (x+j*n/2), n/2));
}
}
str.append(")");
return str;
}
int main() {
int n;
cin>>n;
for(int i=0;i<n;++i){
cin>>video[i];
}
string ans = divide(0,0,n);
cout<<ans;
return 0;
}
'BOJ 백준 > Divide & Conquer' 카테고리의 다른 글
백준 11444 - 피보나치 수 6 (0) | 2020.11.11 |
---|---|
백준 01629 - 곱셈 (0) | 2020.11.11 |
백준 01780 - 종이의 개수 (0) | 2020.11.11 |
백준 02630 - 색종이 만들기 (0) | 2020.11.08 |