[프로그래머스] 쿼드압축 후 개수 세기

최동혁·2022년 12월 27일
0

프로그래머스

목록 보기
41/68

풀이 방법

잘게 쪼개질때까지 재귀 함수를 호출해준다.
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 
profile
항상 성장하는 개발자 최동혁입니다.

0개의 댓글