백준1992(파이썬) - 쿼드트리

resilient

·

2021. 6. 4. 14:17

728x90
반응형

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

 

1992번: 쿼드트리

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

www.acmicpc.net

  • 이 문제는 1780번 종이의 개수와 거의 유사한 문제였다. 1780은 3^N 의 변의 길이라면 이 문제는 2^N의 변의 길이로 4개씩 쪼개주는 형태였다.
  • 자세한 설명은 주석에 포함시켜두었다.
import sys
input = sys.stdin.readline

n = int(input())
graph =[list(input()) for _ in range(n)]

result = []
def function(x,y,length):
    #한 압축영상의 시작 값을 start로 둔다.
    start = graph[x][y]
    for i in range(x,x+length):
        for j in range(y,y+length):
            #start (쪼개진 첫번째 값) 과 다르면
            if start != graph[i][j]:
                #쪼개짐이 시작되는 경우에 ( 를 넣어주고
                result.append("(")
                # 4개로 쪼개준다.
                for a in range(2):
                    for b in range(2):
                        function(x+length//2*a,y+length//2*b,length//2)
                #다 처리해준뒤에는 ) 로 닫아준다
                result.append(")")      
                #처리해주고 리턴
                return
    print(x,y)
    #여기서부터는 쪼개질대로 쪼개지고, start값과 같은 것만
    #start 가 0이면 0넣어주고
    if start == '0':
        result.append(0)
    #start가 1이면 1넣어준다.
    elif start == '1':
        result.append(1)
function(0,0,n)
for i in result:
    print(i,end="")
반응형