[백준/파이썬] 2630번 색종이 만들기 풀이

업데이트:



문제 정보


풀이

문제

정사각형 색종이가 주어질 때 같은 색으로만 이루어진 종이 개수(흰색/파란색)를 구하는 문제입니다.

코드

n = int(input())
paper = []
blue = 0
white = 0

for _ in range(n):
    paper.append(list(map(int, input().split())))

def cut(x, y, length):
    global paper, blue, white
    
    if length == 1:
        if paper[x][y] == 1:
            blue += 1
        else :
            white += 1
        return
    
    flag = False
    i = x
    while i < x + length:
        j = y
        while j < y + length:
            flag = paper[x][y] != paper[i][j]
            if flag:
                break
            j += 1
        if flag:
            break
        i += 1

    if flag:
        tmp = length // 2
        cut(x, y, tmp)
        cut(x, y + tmp, tmp)
        cut(x + tmp, y, tmp)
        cut(x + tmp, y + tmp, tmp)
    else:
        if paper[x][y] == 1:
            blue += 1
        else :
            white += 1
        return

cut(0, 0, n);
print(white)
print(blue)

설명

현재 영역이 단색이면 바로 카운트하고, 아니면 4등분으로 재귀 분할해 같은 과정을 반복합니다.



댓글남기기