STUDY/Algorithm

[백준] 1992 쿼드트리 python

sinawi95 2021. 5. 18. 20:12
728x90

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 divNConq(size, r, c):
    global answer
    if size == 1:
        answer += str(matrix[r][c])
        return
    if chk_arr(size, r, c, matrix[r][c]):
        answer += str(matrix[r][c])
        return
    half = size // 2
    # 좌상
    answer += "("
    divNConq(half, r, c)
    # 우상
    divNConq(half, r, c + half)
    # 좌하
    divNConq(half, r + half, c)
    # 우하
    divNConq(half, r + half, c + half)
    answer += ")"
    return


def chk_arr(size, r, c, sel):
    for i in range(r, r + size):
        for j in range(c, c + size):
            if matrix[i][j] != sel:
                return False
    return True

N = int(input())
matrix = [list(map(int, list(input().rstrip()))) for _ in range(N)]
answer = ''
divNConq(N, 0, 0)
print(answer)

간단한 분할정복 문제이다.

배열의 크기에 맞는 영역의 값들이 하나로만 되어있으면 압축이 되고, 그렇지 않으면 분할하는 방식으로 구현하였다.

'STUDY > Algorithm' 카테고리의 다른 글

[백준] 2668 숫자고르기 python  (0) 2021.05.20
[백준] 9466 텀 프로젝트 python  (0) 2021.05.18
[백준] 2750 수 정렬하기 C  (2) 2021.05.18
[백준] 14500 테트로미노 python  (0) 2021.05.18
[백준] 1261 알고스팟 python  (0) 2021.05.18