1answer = [0, 0]
2
3def solution(arr):
4 def recursion(sx, sy, k):
5 global answer
6 origin = arr[sy][sx]
7 cnt = 0
8 for i in range(sx, sx+k):
9 for j in range(sy, sy+k):
10 if origin != arr[j][i]:
11 recursion(sx, sy, k//2)
12 recursion(sx+k//2, sy, k//2)
13 recursion(sx, sy+k//2, k//2)
14 recursion(sx+k//2, sy+k//2, k//2)
15 return
16 answer[origin] += 1
17
18 recursion(0, 0, len(arr))
19 return answer
문제
- 0과 1로 이루어진 2^n x 2^n 크기의 2차원 정수 배열 arr을 압축하려 한다
- 압축하는 방법은
- 당신이 압축하고자 하는 특정 영역을 S라고 정의한다
- 만약 S 내부에 있는 모든 수가 같은 값이라면, S를 해당 수 하나로 압축시킨다
- 그렇지 않다면, S를 정확히 4개의 균일한 정사각형 영역으로 쪼갠 뒤, 각 정사각형 영역에 대해 같은 방식의 압축을 시도한다
- TC
- input
[[1,1,0,0],[1,0,0,0],[1,0,0,1],[1,1,1,1]]
- ouput
[4,9]
- input
해결방법
- recursion함수를 만들어서 재귀적으로 풀었다
- recursion함수 인자의 k는 현재 영역의 길이를 의미한다