잘게 쪼개질때까지 재귀 함수를 호출해준다.
4등분으로 짤라주면서 파라미터로는 arr배열과 answer 배열 그리고 시작 행, 열 index를 넣어준다.
더 이상 쪼개지지 않는다면 해당 값을 return 해준다.
4 방향으로 쪼개고 나온 return 값으로 비교를 한다.
만약 4개의 return 값이 전부다 같다면 같은 숫자 값으로 return을 해준다. (이게 숫자를 압축 시켜주는 것이다)
하나라도 다르다면 압축은 불가하기 때문에 각 숫자들을 세준다. 그리고 -1을 return 해준다.
-1이 return 되었으면 다음에 검사할 때도 return 값이 -1인데, 압축이 불가능 하고, 앞에서 이미 숫자들을 count 했기 때문에 넘어간다.
def recul(start_row, start_col, n, arr, answer):
if n == 1:
return arr[start_row][start_col]
n = n // 2
a = recul(start_row, start_col, n, arr, answer)
b = recul(start_row + n, start_col, n, arr, answer)
c = recul(start_row, start_col + n, n, arr, answer)
d = recul(start_row + n, start_col + n, n, arr, answer)
if a == b and b == c and c == d and a != -1:
return a
else:
if a != -1:
answer[a] += 1
if b != -1:
answer[b] += 1
if c != -1:
answer[c] += 1
if d != -1:
answer[d] += 1
return -1
def solution(arr):
answer = [0, 0]
d = recul(0, 0, len(arr), arr, answer)
if d != -1:
answer[d] += 1
return