문제
https://www.acmicpc.net/problem/1780
1780번: 종이의 개수
N×N크기의 행렬로 표현되는 종이가 있다. 종이의 각 칸에는 -1, 0, 1 중 하나가 저장되어 있다. 우리는 이 행렬을 다음과 같은 규칙에 따라 적절한 크기로 자르려고 한다. 만약 종이가 모두 같은 수
www.acmicpc.net
코드
#include <iostream>
using namespace std;
int n;
int paper[2187][2187];
int cnt[3];
void divide(int y, int x, int n){
int num = paper[y][x];
int flag = true;
for(int i=y; i<y+n; i++){
for(int j=x; j<x+n; j++){
if(num != paper[i][j]){
flag = false;
break;
}
}
if(!flag){
break;
}
}
if(flag){
cnt[num+1]++;
}else{
int d = n/3;
for(int a=0; a<3; a++){
for(int b=0; b<3; b++){
divide(y+a*d, x+b*d, d);
}
}
}
}
int main(){
cin >> n;
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
cin >> paper[i][j];
}
}
divide(0, 0, n);
for(int c : cnt){
cout << c << '\n';
}
return 0;
}
정리
참조
'Beakjoon > divide & conquer' 카테고리의 다른 글
[백준] 1074번 Z (C++) - divide & conquer (0) | 2022.02.18 |
---|---|
[백준] 1992번 쿼드트리 (C++) - divide & conquer (0) | 2022.02.17 |
[백준] 2447번 별 찍기 - 10 (C++) - divide & conquer (0) | 2022.02.16 |
[백준] 2630번 색종이 만들기 (C++) - divide & conquer (0) | 2022.02.03 |