def dc(x, y, N):
global w
global b
if N ==1:
if paper[x][y] == 0:
w += 1
else:
b += 1
return
s = paper[x][y]
for i in range(x, x+N):
for j in range(y, y+N):
if paper[i][j] != s:
N = N//2
dc(x, y, N)
dc(x+N, y, N)
dc(x, y+N, N)
dc(x+N, y+N, N)
return
if s == 0:
w += 1
else:
b += 1
n = int(input())
paper = [[0]*n for _ in range(n)]
for i in range(n):
paper[i] = list(map(int, input().split()))
w = 0
b = 0
dc(0, 0, n)
print(w)
print(b)
분할 정복을 통해 해결해나가는 문제
분할 정복 함수의 경우 시작 좌표와 N을 주어진다.
시작 좌표를 시작해서 N크기의 2중 for 문을 돌면서 시작 좌표와 다른 색이 존재한다면 4등분해서 정복해나간다.