Algorithm/Algorithm Problem

프로그래머스 쿼드압축 후 개수 새기(분할 정복)

땅지원 2022. 4. 14. 18:59

https://programmers.co.kr/learn/courses/30/lessons/68936

 

코딩테스트 연습 - 쿼드압축 후 개수 세기

[[1,1,0,0],[1,0,0,0],[1,0,0,1],[1,1,1,1]] [4,9] [[1,1,1,1,1,1,1,1],[0,1,1,1,1,1,1,1],[0,0,0,0,1,1,1,1],[0,1,0,0,1,1,1,1],[0,0,0,0,0,0,1,1],[0,0,0,0,0,0,0,1],[0,0,0,0,1,0,0,1],[0,0,0,0,1,1,1,1]] [10,15]

programmers.co.kr

 

백준 1780 종이의 개수 와 동일한 분할 정복 문제

 

def solution(arr):
    import sys
    sys.setrecursionlimit(10 ** 6)
    data = [0, 0]

    def divide_arr(x, y, n):
        std = arr[x][y]

        for i in range(x, x + n):
            for j in range(y, y + n):
                if std != arr[i][j]:
                    for a in range(2):
                        for b in range(2):
                            divide_arr(x + a * n // 2, y + b * n // 2, n // 2)
                    return
        data[std] += 1

    divide_arr(0, 0, len(arr))

    return data

arr = [[1,1,0,0],[1,0,0,0],[1,0,0,1],[1,1,1,1]]


#arr = [[1,1,1,1,1,1,1,1],[0,1,1,1,1,1,1,1],[0,0,0,0,1,1,1,1],[0,1,0,0,1,1,1,1],[0,0,0,0,0,0,1,1],[0,0,0,0,0,0,0,1],[0,0,0,0,1,0,0,1],[0,0,0,0,1,1,1,1]]