honey_pot

[Python] 쿼드압축 후 개수 세기 본문

문제 풀이

[Python] 쿼드압축 후 개수 세기

_tera_ 2022. 9. 21. 15:27

https://school.programmers.co.kr/learn/courses/30/lessons/68936


압축을 하는 quad 함수를 외부에 선언할 경우 answer를 global로 선언해서 quad 함수에서도 쓸 수 있게 해야하고 arr를 파라미터로 줘야한다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
def solution(arr):
    global answer
    answer = [0,0]  # 0의 개수, 1의 개수
    quad(arr, answer, len(arr))
    return answer

def quad(arr, s, n):
    x, y, target = s[0],s[1], arr[s[0]][s[1]]
    for i in range(n):
        for j in range(n):
            if target != arr[x+i][y+j]:
                n //= 2
                quad(arr, [x,y],n)
                quad(arr, [x,y+n], n)
                quad(arr, [x+n,y], n)
                quad(arr, [x+n,y+n], n)
                return
    answer[target] += 1
cs

 

개인적으로 global을 잘 안 쓰다 보니 quad 함수를 내부에 선언할 경우가 더 편했다

근데 파이썬 알고리즘 인터뷰 책을 읽고 나니 내부함수명에 _를 안 붙이면 규칙에 어긋나는 거 같아서 신경쓰인다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
def solution(arr):
    def quad(x,y,n):
        target = arr[x][y]
        for i in range(n):
            for j in range(n):
                if target != arr[x+i][y+j]:
                    n //= 2
                    quad(x,y,n)
                    quad(x+n,y,n)
                    quad(x,y+n,n)
                    quad(x+n,y+n,n)
                    return
        answer[target] += 1
    answer = [0,0]
    n = len(arr)
    quad(0,0,n)
    return answer
cs

 

'문제 풀이' 카테고리의 다른 글

[Python] 가장 큰 정사각형 찾기  (1) 2022.09.21
[Python] 줄 서는 방법  (1) 2022.09.21
[Python] 2개 이하로 다른 비트  (1) 2022.09.21
[Python] 양궁대회  (1) 2022.09.20
[Python] 점프와 순간 이동  (0) 2022.09.20
Comments