def solution(arr):
#n=압축크기, x,y=시작좌표
def recur(n, x, y):
if n==1:
return
compression = True
target = arr[x][y]
for i in range(x, x+n):
for j in range(y, y+n):
if arr[i][j] != target:
compression = False
if compression:
if arr[x][y] == 0:
answer[0] += 1
else:
answer[1] += 1
for i in range(x, x+n):
for j in range(y, y+n):
arr[i][j] = 9
else:
n = int(n // 2)
recur(n, x, y)
recur(n, x, y+n)
recur(n, x+n, y)
recur(n, x+n, y+n)
answer = [0, 0]
S = len(arr)
recur(S, 0, 0)
for i in range(len(arr)):
for j in range(len(arr)):
if arr[i][j] == 0:
answer[0] += 1
elif arr[i][j] == 1:
answer[1] += 1
return answer
재귀함수를 사용하여 m칸이 모두 동일한 값(1 또는 0)인지 확인했다. m이 1이 될 때, 조건문을 통해 재귀함수에서 탈출한다. m칸의 값이 모두 동일하여 한 칸으로 치환되는 원소들은 이미 쿼드압축이 끝났다는 의미로 사용할 값인 9
로 바꿔준다.
압축을 시도한다.
압축에 실패할 경우, 4개의 영역을 재귀함수로 나누어 같은 작업을 반복해준다.
재귀함수가 종료되면 남아있는 0과 1의 갯수를 2중 for문을 통해 더해준다. 이미 쿼드압축 처리된 원소들은 9의 값을 가지므로 무시한다.