개발/algorithm

[백준 1992번] 쿼드트리 -python

zzi_on2 2022. 2. 16. 14:50

문제 링크

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

 

1992번: 쿼드트리

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

www.acmicpc.net

풀이

- 분할 정복 문제 

- 범위의 제일 왼쪽 위의 값을 start 에 저장해놓고 범위 안에 start와 다른 값이 있을 경우 4등분하여 재귀적으로 호출한다.

   이 때 괄호를 쳐준다. 

- 만약 서로 다른 값이 없을 경우 start가 0 이면 result에 0 대입, 1이면 result에 1 대입 

result = []

def sol(x,y,n):
  start = graph[x][y]
  
  global result 

  for i in range(x, x+n):
    for j in range(y, y+n):
      if start != graph[i][j]:
        result.append('(')
        sol(x, y, n//2)
        sol(x, y+n//2,n//2)
        sol(x+n//2, y, n//2)
        sol(x+n//2, y+n//2, n//2)
        result.append(')')
        return

  if start == 0:
    result.append('0')
  else:
    result.append('1')
    
n = int(input())

graph = []

for _ in range(n):
  graph.append(list(map(int,input())))

sol(0,0,n)
print("".join(result))