백준 2630 색종이 만들기(분할 정복)

맹민재·2023년 4월 8일
0

알고리즘

목록 보기
46/134
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등분해서 정복해나간다.

profile
ㄱH ㅂrㄹ ㅈr

0개의 댓글