풀이

3x3으로 분할해야하는 조금 귀찮은 분할정복 문제이다.

#include <iostream>

using namespace std;

int countA = 0, countB = 0, countC = 0;
int paper[2188][2188];

void conquer(int y, int x, int size) {
	int num = paper[y][x];

	for (int i = y; i < y + size; i++) {
		for (int j = x; j < x + size; j++) {
			if (num != paper[i][j]) {
				conquer(y, x, size / 3);
				conquer(y + size / 3, x, size / 3);
				conquer(y + size * 2 / 3, x, size / 3);
				conquer(y, x + size / 3, size / 3);
				conquer(y + size / 3, x + size / 3, size / 3);
				conquer(y + size * 2 / 3, x + size / 3, size / 3);
				conquer(y, x + size * 2 / 3, size / 3);
				conquer(y + size / 3, x + size * 2 / 3, size / 3);
				conquer(y + size * 2 / 3, x + size * 2 / 3, size / 3);

				return;
			}
		}
	}

	if (num == -1) countA++;
	else if (num == 0) countB++;
	else countC++;

	return;
}

int main() {
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	int n;
	cin >> n;

	for (int i = 0; i < n; i++)
		for (int j = 0; j < n; j++)
			cin >> paper[i][j];

	conquer(0, 0, n);

	cout << countA << '\n' << countB << '\n' << countC;

	return 0;
}

'백준 > 기타' 카테고리의 다른 글

[백준/C++] 14940번: 쉬운 최단거리  (0) 2023.06.28
[백준/C++] 18110번: solved.ac  (0) 2023.06.28
[백준/C++] 2630번: 색종이 만들기  (0) 2023.05.22
[백준/C++] 1074번: Z  (0) 2023.05.22
[백준/C++] 1992번: 쿼드트리  (0) 2023.05.22

+ Recent posts