2630번: 색종이 만들기
첫째 줄에는 전체 종이의 한 변의 길이 N이 주어져 있다. N은 2, 4, 8, 16, 32, 64, 128 중 하나이다. 색종이의 각 가로줄의 정사각형칸들의 색이 윗줄부터 차례로 둘째 줄부터 마지막 줄까지 주어진다.
www.acmicpc.net
divide and conquer로 카테고리로 분리가 되어있지만
재귀함수를 사용하자...
#include <stdio.h>
using namespace std;
int n;
int arr[129][129];
int res[2];
bool isValid(int x, int y, int len)
{
int cmp = arr[x][y];
for (int i = x; i < x + len; i++)
{
for (int j = y; j < y + len; j++)
{
if (cmp != arr[i][j])
{
return false;
}
}
}
return true;
}
void ref(int x, int y, int len)
{
if (len == 1)
{
res[arr[x][y]]++;
return;
}
if (isValid(x, y, len))
{
res[arr[x][y]]++;
return;
}
len /= 2;
ref(x, y, len);
ref(x + len, y, len);
ref(x, y + len, len);
ref(x + len, y + len, len);
}
int main(void)
{
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
scanf("%d", &arr[i][j]);
}
}
ref(0, 0, n);
printf("%d\n%d\n", res[0], res[1]);
return 0;
}
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
[백준 1043] 거짓말 (0) | 2021.01.30 |
---|---|
[백준 11660] 구간 합 구하기 5 (0) | 2021.01.28 |
[백준 1197] 최소 스패닝 트리 (0) | 2021.01.26 |
[백준 9372] 상근이의 여행 (0) | 2021.01.25 |
[백준 1080] 행렬 (0) | 2021.01.24 |
댓글