0과 1로 이루어진 2n x 2n 크기의 2차원 정수 배열 arr이 있습니다. 당신은 이 arr을 쿼드 트리와 같은 방식으로 압축하고자 합니다. 구체적인 방식은 다음과 같습니다.
arr이 매개변수로 주어집니다. 위와 같은 방식으로 arr을 압축했을 때, 배열에 최종적으로 남는 0의 개수와 1의 개수를 배열에 담아서 return 하도록 solution 함수를 완성해주세요.
arr | result |
---|---|
[[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] |
def solution(arr):
answer = [0,0] # tmp=0,1이면 answer의 index로도 할당이 가능
N = len(arr)
def quad(x,y,n):
tmp = arr[x][y] # 기준값
for i in range(x,x+n):
for j in range(y,y+n):
if arr[i][j] != tmp: #만약 모두 동일한 값이 아니라면 4분할 진행
hn = n // 2
quad(x,y,hn)
quad(x,y+hn,hn)
quad(x+hn,y,hn)
quad(x+hn,y+hn,hn)
return
answer[tmp] += 1
quad(0,0,N)
return answer
4분할의 아이디어를 재귀함수를 통해 구현을 진행했습니다.
tmp
로 최초 기준값을 하나 잡아주고, 배열을 돌면서 tmp
값과 동일하지 않다면 4분할을 재귀적으로 진행하는 방향성으로 구현했습니다.