: 문제를 나눌 수 없을 때까지 나누어서 각각을 풀면서 다시 합병하여 문제의 답을 얻는다.
n = int(input())
paper = [list(map(int, input().split())) for _ in range(n)]
white = 0
blue = 0
def quad_tree(x, y, n):
global white, blue
flag = 0
color = paper[x][y]
for i in range(x, x+n):
for j in range(y, y+n):
#처음 color와 다르면 flag++
if color != paper[i][j]:
flag += 1
break
#조건이 만족되지 않을 시에는 쪼개어서 푼다.
if flag != 0:
quad_tree(x, y, n//2) #1사분면
quad_tree(x, y+n//2, n//2) #2사분면
quad_tree(x+n//2, y, n//2) #3사분면
quad_tree(x+n//2, y+n//2, n//2) #4사분면
else:
if color == 0:
white += 1
else:
blue += 1
quad_tree(0,0,n) #(0,0)부터 시작
print(white)
print(blue)
전역변수를 쓰는게 좋지 않다고 해서 다음부터는 파라미터로 넘겨주도록 해야겠다. 조건에 맞고 안맞고를 기록하는 것은 flag변수를 통해서 했고 조건에 맞지 않으면 재귀를 통해 범위를 줄여나가면서 진행했다.