https://www.acmicpc.net/problem/2630
2630번: 색종이 만들기
첫째 줄에는 전체 종이의 한 변의 길이 N이 주어져 있다. N은 2, 4, 8, 16, 32, 64, 128 중 하나이다. 색종이의 각 가로줄의 정사각형칸들의 색이 윗줄부터 차례로 둘째 줄부터 마지막 줄까지 주어진다.
www.acmicpc.net
전의 문제와 같은 문제이다. 나누어서 1일 경우는 cnt2에 ++해주고, 0일 경우에는 cnt1에 ++해주면 쉽게 풀 수 있다.
#include <cstdio>
int cnt1=0, cnt2=0, array[128][128];
void func(int a, int b, int i, int j){
bool zero = true;
bool one = true;
for(int q=a; q<b; q++){
for(int w=i; w<j; w++){
if(array[q][w]==0)
one = false;
if(array[q][w]==1)
zero = false;
}
}
if(one)
cnt2++;
if(zero)
cnt1++;
if(!one && !zero){
func(a, (a+b)/2, i, (i+j)/2);
func(a, (a+b)/2, (i+j)/2, j);
func((a+b)/2, b, i, (i+j)/2);
func((a+b)/2, b, (i+j)/2, j);
}
}
int main(void){
int N;
scanf("%d", &N);
for(int i=0; i<N; i++)
for(int j=0; j<N; j++)
scanf("%d", &array[i][j]);
func(0, N, 0, N);
printf("%d\n%d",cnt1,cnt2);
}
'알고리즘 문제' 카테고리의 다른 글
[C/C++ 백준 4811번] 알약 (Gold 5) (0) | 2020.08.31 |
---|---|
[C/C++ 백준 1756번] 피자 굽기 (Gold 5) (0) | 2020.08.30 |
[C/C++ 백준 1992번] 쿼드트리 (Silver 1) (0) | 2020.08.29 |
[C/C++ 백준 9659번] 돌 게임 5 (Gold 5) (0) | 2020.08.28 |
[C/C++ 백준 1764번] 듣보잡 (Silver 4) (0) | 2020.08.28 |