티스토리 뷰

728x90
반응형

문제

 

www.acmicpc.net/problem/1992

 

1992번: 쿼드트리

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

www.acmicpc.net

 

코드

n = int(input())

tree = [list(map(int,(input()))) for _ in range(n)]
print(tree)
result = []

def quad_tree(x,y,n):
    global result
    color = tree[x][y]

    for i in range(x, x+n):
        for j in range(y, y+n):
            if color != tree[i][j]: # 범위안에 한개라도 다른경우는 4분면으로 나눠서 다시 검색
                result.append("(") # 4분면으로 나눌때 괄호를 친다.
                quad_tree(x,y,n//2)
                quad_tree(x, y+n//2, n//2)
                quad_tree(x+n//2, y, n//2)
                quad_tree(x+n//2, y+n//2, n//2)
                result.append(")")
                return
    result.append(color) # 재귀로 안들어가고 for문이 전부 다 끝난 상태이기 때문에 범위안에 모든수가 같다고 볼 수 있다.

quad_tree(0,0,n)
print("".join(map(str,(result))))

 

코드설명

n에 영상의 크기가 주어지고 n^2만큼 크기의 범위에 0과 1로 이어져 있다. 0과 1이 섞여있다면 4분면으로 나눠 압축하여 출력한다. 압축할때 괄호로 묶어준다.

 

quad_tree 함수가 실행이 되면 x,y범위값을 검사해 범위안에 서로 다른값이 있을경우 4등분으로 나눠주고 괄호를 쳐준다. 만약 재귀함수로 안들어가고 for문이 끝난다면 범위안에 값이 전부 같은 값이기 때문에 result에 append 해준다.

 

모든 재귀호출이 끝난뒤에 join을 이용해 result를 출력해준다.

 

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28