Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

아무거나 내꺼 공부할래

[BJ] 1992번 : 쿼드트리(재귀) / c++ & c / 제한시간 : 2초 본문

[c언어&c++] 알고리즘 공부/백준(BJ)

[BJ] 1992번 : 쿼드트리(재귀) / c++ & c / 제한시간 : 2초

mero95 2021. 2. 25. 14:05

www.acmicpc.net/problem/1992

 

1992번: 쿼드트리

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

www.acmicpc.net

 

<코드>

#pragma warning(disable:4996)
#include<stdio.h>
using namespace std;

char map[65][65];
int n, p = 0;
char ans[100000];

void compress(int x, int y, int edge) {
	char temp; 
	int i, j;
	temp = map[x][y];
	if (edge == 1) {
		if (temp == '1')ans[p++] = '1';
		else ans[p++] = '0';
		return;
	}

	for (i = x; i < x + edge; i++) {
		for (j = y; j < y + edge; j++) {
			if (temp != map[i][j]) {
				ans[p++] = '(';
				compress(x, y, edge / 2);
				compress(x, y + edge / 2, edge / 2);
				compress(x + edge / 2, y, edge / 2);
				compress(x + edge / 2, y + edge / 2, edge / 2);
				ans[p++] = ')';
				return;
			}
		}
	}
	if (temp == '1') ans[p++] = '1';
	else ans[p++] = '0';
	return;
}

int main() {
	int i;
	scanf("%d", &n);
	for (i = 0; i < n; i++)
			scanf("%s", &map[i]);

	compress(0, 0, n);
	for (i = 0; i < p; i++) {
		printf("%c", ans[i]);
	}
	puts("");
	return 0;
}