문제풀이/기타

[파이썬] [분할정복] 백준 2630 색종이 만들기

승무_ 2022. 2. 23. 11:24

문제

https://www.acmicpc.net/problem/2630

 

2630번: 색종이 만들기

첫째 줄에는 전체 종이의 한 변의 길이 N이 주어져 있다. N은 2, 4, 8, 16, 32, 64, 128 중 하나이다. 색종이의 각 가로줄의 정사각형칸들의 색이 윗줄부터 차례로 둘째 줄부터 마지막 줄까지 주어진다.

www.acmicpc.net

코드

import sys
input=sys.stdin.readline

n=int(input())
array=[list(map(int, input().split())) for _ in range(n)]

white=0
blue=0

def make(n,paper):
    global white
    global blue
    count=0

    for i in range(n):
        count+=sum(paper[i])

    if count==0:
        white+=1
    elif count==len(paper)*len(paper):
        blue+=1
    else:
        temp=[paper[i][:n//2] for i in range(n//2)]
        make(n//2,temp)
        temp=[paper[i][n//2:] for i in range(n//2)]
        make(n//2,temp)
        temp=[paper[i][:n//2] for i in range(n//2,n)]
        make(n//2,temp)
        temp = [paper[i][n//2:] for i in range(n // 2, n)]
        make(n // 2, temp)

make(n,array)
print(white,blue)