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)

+ Recent posts