본문 바로가기

알고리즘/분할정복

파이썬 | 백준 | 1992 | 쿼드트리

solution

1. 사분면을 나눌 때 괄호 추가

2. (x, y) → (y, x)

# 1992, 쿼드트리
import sys

def com(x, y, n):
    check = bw[x][y]
    global res
    for i in range(x, x + n):
        for j in range(y, y + n):
            if bw[i][j] != check:   # 영상이 같은 색이 아님
                print('(', end='')
                com(x, y, n // 2)   # 1
                com(x, y + n // 2, n // 2)  # 2
                com(x + n // 2, y, n // 2)  # 3
                com(x + n // 2, y + n // 2, n // 2) # 4
                print(')', end='')
                return

    if check == 0:  # 영상이 모두 0
        print('0', end='')
        return
    else:   # 영상이 모두 1
        print('1', end='')
        return


n = int(sys.stdin.readline())
bw = [list(map(int, sys.stdin.readline().rstrip())) for _ in range(n)]

res = ""
com(0, 0, n)

print(res)

29380KB

68ms

 

문제 출처 https://www.acmicpc.net/problem/1992

 

1992번: 쿼드트리

첫째 줄에는 영상의 크기를 나타내는 숫자 N 이 주어진다. N 은 언제나 2의 제곱수로 주어지며, 1≤N ≤64의 범위를 가진다. 두 번째 줄부터는 길이 N 의 문자열이 N 개 들어온다. 각 문자열은 0 또는

www.acmicpc.net

 

'알고리즘 > 분할정복' 카테고리의 다른 글

파이썬 | 백준 | 1074 | Z  (0) 2020.09.03