DOTY

4) 백준 1992 - 쿼드트리 본문

Algorithm/Recursion

4) 백준 1992 - 쿼드트리

증식세포 2023. 2. 19. 17:07
728x90
반응형

1992번: 쿼드트리 (acmicpc.net)

 

1992번: 쿼드트리

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

www.acmicpc.net


분할 정복문제.

관건은 괄호를 어떻게 처리할까 였다.

#include <bits/stdc++.h>

using namespace std;

char video[64][64];
string answer = "";

void quadTree(int N, int x, int y) {
	int cnt = 0;
	for(int i = 0; i < N; i++) {
		for(int j = 0; j < N; j++) {
			if(video[x + i][y + j] == '1') {
				cnt++;
			}
		}
	}
	if(cnt == N*N) {
		answer += "1";
	}
	else if(cnt == 0) {
		answer += "0";
	}
	else {
		answer += "(";
		quadTree(N/2, x, y);
		quadTree(N/2, x, y+ N/2);
		quadTree(N/2, x + N/2, y);
		quadTree(N/2, x + N/2, y + N/2);
		answer += ")";
	}
}

int main(void) {
	int N;
	cin >> N;
	for(int i = 0; i < N; i++) {
		for(int j = 0; j < N; j++) {
			cin >> video[i][j];
		}
	}
	quadTree(N, 0, 0);
	
	cout << answer << endl;
}

닫는 괄호는 분할이 다 끝나면 닫아주기만 해서 문제 없었는데 여는 괄호를 어디다 둘까 고민을 했다.

[ 모두 0으로만 되어 있으면 압축 결과는 "0"이 되고 ] 이 문장에서 힌트를 얻었다.

여는 괄호는 흑백영상을 나눌때만 열어주면 된다.

728x90
반응형

'Algorithm > Recursion' 카테고리의 다른 글

6) 백준 1629 - 곱셈  (0) 2023.02.20
5) 백준 1780 - 종이의 개수  (0) 2023.02.19
3) 백준 2630 - 색종이 만들기  (0) 2023.02.18
2) 백준 11729 - 하노이 탑 이동 순서  (0) 2023.02.17
1) 백준 10872 - 팩토리얼  (0) 2023.02.09
Comments