파이썬 알고리즘 문제 풀이

Baekjoon Online Judge 1992번 파이썬. 분할 정복.

gogi masidda 2022. 12. 27. 17:18

문제 링크
https://www.acmicpc.net/problem/1992

1992번: 쿼드트리

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

www.acmicpc.net


2630번과 유사한 문제이다.
하지만 2630번처럼 반복문 안에서 프린팅할 문자열 “(“나 “)”를 추가하면 불필요한 경우에도 괄호가 생기기 때문에 반복문 밖에서 추가해주어야 한다,
출력에 신경써서 풀어야한다.

정답 코드

N = int(input())
tree = [list(map(int,input()))for i in range(N)]

def solution(x,y,N):
  number = tree[x][y]
  for i in range(x,x+N):
    for j in range(y,y+N):
      if number != tree[i][j]:
        number = -1
        break

  if number == -1:
    print("(",end='')
    solution(x,y,N//2)
    solution(x,y+N//2,N//2)
    solution(x+N//2,y,N//2)
    solution(x+N//2,y+N//2,N//2)
    print(")",end='')
  elif number == 1:
    print(1,end='')
  elif number == 0:
    print(0,end='')

solution(0,0,N)
728x90