코딩하는 해맑은 거북이

[Python] 쿼드트리 - 백준 (분할정복) 본문

코딩테스트

[Python] 쿼드트리 - 백준 (분할정복)

#CJE 2023. 12. 5.
해당 글은 백준 1992번 '쿼드트리' 문제를 다룬다.

문제

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

 

1992번: 쿼드트리

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

www.acmicpc.net

 

설명

처음에는 nxn 행렬을 모두 탐색하다가, (0, 0)의 값과 다르다면 4개로 나누어서 재탐색하는 분할정복 알고리즘으로 해결하였다. 주의할 점은 if문에 return으로 4분할로 재귀 후 종료할 수 있도록 해야한다.

 

코드

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

def check(x, y, n):
    for i in range(x, x+n):
        for j in range(y, y+n):
            if arr[x][y] != arr[i][j]:
                print('(', end='')
                n //= 2
                check(x, y, n)
                check(x, y + n, n)
                check(x + n, y, n)
                check(x + n, y + n, n)
                print(')', end='')
                return
    if arr[x][y] == 1:
        print(1, end='')
    else:
        print(0, end='')
        
check(0, 0, n)

     

 

 

Comments