https://www.acmicpc.net/problem/2630
처음에는 시작점, 종료점 각각을 매개변수로 넣었다가 더 헷갈려서
시작점의 row, col, 한 변의 길이만을 매개변수로 두었다.
시작하는 row, col 위치만 안다면 각각에 +n만 해서 범위를 잡을 수 있기 때문이다.
어째 분할과 정복보다는 위치 잡는 게 더 헷갈렸던 문제.
import sys
# (시작점 row, 시작점 col, 한 변의 길이)
def devideAndConquer(r, c, n):
global white, blue
color = board[r][c]
for row in range(r, r + n):
for col in range(c, c + n):
if board[row][col] != color:
devideAndConquer(r, c, n//2) # 0, 0
devideAndConquer(r, c + n // 2, n//2) # 0, 1
devideAndConquer(r + n // 2, c, n//2) # 1, 0
devideAndConquer(r + n // 2, c + n // 2, n//2) # 1, 1
return
if color == B:
blue += 1
elif color == W:
white += 1
N = int(sys.stdin.readline())
board = [list(map(int, sys.stdin.readline().split())) for _ in range(N)]
W, B = 0, 1
white, blue = 0, 0
devideAndConquer(0, 0, N)
print(white)
print(blue)