1992-四叉木


📚 1992-四叉木


四叉木
 

理解する


左上:1番
右上:2番
左下:3番
右下:4番(0, 0)座標から始まります.
全体4等分、1番から確認します.
  • 圧縮結果は1、出力
  • である.
    圧縮結果が0であると、出力が出力.
  • 両方ではなく混在している場合、(を出力して再帰呼び出しを行う.
  • 再呼の場合、現在の空間サイズは//2である.これをdと呼ぶと、
    (d, x, y)
    (d, x + d, y)
    (d, x, y + d)
    (d, x + d, y + d)
    分け与える.(対応する空間結果は、再帰呼び出しによって得られる.)
     

    ソース

    import sys
    
    read = sys.stdin.readline
    n = int(read())
    
    arr = []
    
    for _ in range(n):
        arr.append(list(map(int, read().strip())))
    
    
    def quad_tree(c_size, x, y):
        if c_size == 1:
            print(arr[x][y], end="")
            return
    
        check = False
    
        for i in range(x, x + c_size):
            for j in range(y, y + c_size):
                if arr[i][j] != arr[x][y]:
                    check = True
                    break
            if check:
                break
    
        if not check:
            print(arr[x][y], end="")
        else:
            c_size //= 2
    
            print("(", end="")
            quad_tree(c_size, x, y)
            quad_tree(c_size, x, y + c_size)
            quad_tree(c_size, x + c_size, y)
            quad_tree(c_size, x + c_size, y + c_size)
            print(")", end="")
    
    
    quad_tree(n, 0, 0)
    
    # 참고 : https://dojinkimm.github.io/problem_solving/2020/01/08/boj-1992_quadtree.html
     
    採点結果

     
    注意:https://dojinkimm.github.io/problem_solving/2020/01/08/boj-1992_quadtree.html