PS/백준 알고리즘[BOJ]

[백준 1780번] 종이의 개수 (C++)

BE_개발자 2023. 10. 21. 17:01
728x90
반응형

이미지 예시

//white: 0, black: 1
#define SIZE 2187
#include<iostream>
#include<string>
#include<cstdlib>

using namespace std;
int dat;  // -1, 0, 1
int cnt[3];  // -1: 0, 0: 1, 1: 2
int map[SIZE][SIZE];
// change - true, not change - false
bool check(int x1, int y1, int x2, int y2) {
	dat = map[x1][y1];
	for (int i = x1; i < x2; i++) {
		for (int j = y1; j < y2; j++) {
			if (dat != map[i][j]) return true;
		}
	}
	return false;
}

void dc(int size, int x, int y) {
	if (size == 1) {
		cnt[++map[x][y]]++;
		return;
	}
	if (!check(x, y, x + size, y + size)) {
		cnt[++map[x][y]]++;
		return;
	}
	size /= 3;
	for (int i = 0; i < 3; i++) {
		for (int j = 0; j < 3; j++) dc(size, x + size * j, y + size*i);
	}
}

int main(void) {
	cin.tie(0);
	ios_base::sync_with_stdio(NULL);
	int N;
	cin >> N;
	for (int i = 0; i < N; i++) {;
	for (int j = 0; j < N; j++) cin >> map[j][i];
	}
	dc(N, 0, 0);
	cout << cnt[0] << "\n" << cnt[1] << "\n" << cnt[2];
	return 0;
}
728x90
반응형