[C++] 백준 1780. 종이의 개수

멋진감자·2025년 2월 22일
0

알고리즘

목록 보기
97/127
post-thumbnail

🌽 문제

🥕 입출력

🥔 풀이

색종이 만들기 문제의 응용 버전이다.
색종이에선 종이를 4등분했다면 여기선 9등분한다.
코드도 아주 비슷하다!

🥬 코드

#include <iostream>
#include <vector>
using namespace std;

int n;
vector<vector<int>> v;
vector<int> cnt(3);

void solution(int y, int x, int size) {
	int num = v[y][x];
	for (int i = y; i < y + size; i++) {
		for (int j = x; j < x + size; j++) {
			if (v[i][j] != num) {
				int ns = size / 3;
				solution(y, x, ns);
				solution(y, x + ns, ns);
				solution(y, x + (ns * 2), ns);
				solution(y + ns, x, ns);
				solution(y + ns, x + ns, ns);
				solution(y + ns, x + (ns * 2), ns);
				solution(y + (ns * 2), x, ns);
				solution(y + (ns * 2), x + ns, ns);
				solution(y + (ns * 2), x + (ns * 2), ns);
				return;
			}
		}
	}
	cnt[num + 1]++;
}

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	cin >> n;
	v.resize(n, vector<int>(n));
	for (int i = 0; i < n; i++)
		for (int j = 0; j < n; j++)
			cin >> v[i][j];
	
	solution(0, 0, n);
	
	for (int i = 0; i < 3; i++)
		cout << cnt[i] << "\n";

	return 0;
}

🥜 채점

profile
난멋져

0개의 댓글