코딩테스트 대비/단계별 코딩 테스트 준비(27일 과정)

[분할 정복/Python] 1992번: 쿼드트리 - 효과는 굉장했다!

bluetag_boy 2022. 2. 19. 03:27
반응형
 

1992번: 쿼드트리

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

www.acmicpc.net

 

알고리즘 분류

  • 분할 정복
  • 재귀

 

 

SOLUTION

import sys

def quad_tree(x,y,N):
    point = tree[x][y]

    for i in range(x,x+N):
        for j in range(y,y+N):
            if point != tree[i][j]: # 같은 색의 점이 아니면 분활
                answer.append("(") # 분할될 때 마다 괄호 추가
                quad_tree(x,y,N//2) # 2 사분면
                quad_tree(x,y+N//2,N//2) # 3 사분면
                quad_tree(x+N//2,y,N//2) # 1 사분면
                quad_tree(x+N//2,y+N//2,N//2) # 4 사분면
                answer.append(")") # 분할될 때 마다 괄호 추가

                return answer
                
    if point == '1':
        answer.append('1')   
             
    if point == '0':
        answer.append('0')        

    return answer


N = int(sys.stdin.readline())
tree = [sys.stdin.readline().rstrip() for _ in range(N)]
answer = []

print(''.join(quad_tree(0,0,N))) # 좌표 0,0 부터 순차적으로 탐색