Algorithm Problems

[백준][Python] 색종이 만들기 - 재귀(분할정복)

WakaraNai 2021. 8. 31. 12:32
728x90
반응형

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

 

2630번: 색종이 만들기

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

www.acmicpc.net

 

 

Python

import sys
input = sys.stdin.readline

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

def recur(r,c,size):
    global arr

    if size == 1:
        return str(arr[r][c])

    size //= 2
    ans = ''
    ans += recur(r,c,size)
    ans += recur(r+size,c,size)
    ans += recur(r,c+size,size)
    ans += recur(r+size,c+size,size)

    for a in ans:
        if a != ans[0]:
            return ans
    return str(arr[r][c])

ans = recur(0,0,n)
print(ans.count("0"))
print(ans.count("1"))
728x90
반응형