본문 바로가기

백준 문제 풀이 및 피드백

2023.01.14 백준 쿼드트리

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

 

1992번: 쿼드트리

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

www.acmicpc.net

import sys
input = sys.stdin.readline

def quad_tree():
    n = int(input().strip())

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

    answer = ""

    def quad(x,y,n):
        st = graph[x][y]
        nonlocal answer
        for i in range(x,x+n):
            for j in range(y,y+n):
                if graph[i][j] != st:
                    half = n//2
                    answer += "("
                    quad(x,y,half)
                    quad(x ,y+half,half)
                    quad(x+half,y,half)
                    quad(x+half,y+half,half)
                    answer += ")"
                    return
        answer += str(graph[x][y])

    quad(0,0,n)
    return answer

print(quad_tree())

4등분으로 나누어 질때 "(" 추가하고 끝나고 나서는 ")"를 추가한다는 생각을 아이디어로 나누어가면서 확인을 했다.

numpy를 사용해서 2차원리스트를 슬라이싱해서 all하는 방법도 있을거 같다.