[아홉번째 문제] 백준 / 1992 : 쿼드트리

‍sw·2021년 10월 13일
0

1일 1문제

목록 보기
9/9

다시 돌아온 분할 문제.

4사분면을 나눠서 진행된다는 것을 파악할 수 있으며,

# include <iostream>
using namespace std;

char arr[65][65];
void quadCheck(int x, int y, int size) {
	int one = 1;
	int zero = 1;

	if (size == 1) {
		cout << arr[x][y];
		return;
	}
	for (int i = x; i < x + size; i++) {
		for (int j = y; j < y + size; j++) {
			if (arr[i][j] == '0') one = 0;
			if (arr[i][j] == '1') zero = 0;
		}
	}
	if (one == 1) { 
		cout << 1; 
		return;
	}
	if (zero == 1) {
		cout << 0; 
		return; 
	}
	cout << "(";
	quadCheck(x, y, size / 2);
	quadCheck(x, y + (size / 2), size / 2);
	quadCheck(x + (size / 2), y, size / 2);
	quadCheck(x +(size / 2) , y+ (size / 2) ,size/2);
	cout << ")";
}
int main() {
	int N;
	cin >> N;

	for (int i = 0; i < N; i++) {
		for (int j = 0; j <N; j++) {
			cin >> arr[i][j];
		}
	}
	quadCheck(0, 0, N);
	return 0;
}

전형적인 DPS 느낌이라 크게 어렵지는 않았다.
핵심은 기저사례 ( size = 1 , all 1 , all 0 ) 를 잘 구분하여 return 해주는 것이다.

Hits

0개의 댓글

관련 채용 정보