250x250
Notice
Recent Posts
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
관리 메뉴

일상 코딩

[python] 백준 알고리즘 1074번 Z, 다이나믹 프로그래밍 풀이법 본문

코딩테스트/백준 online Judge

[python] 백준 알고리즘 1074번 Z, 다이나믹 프로그래밍 풀이법

polarcompass 2021. 11. 10. 23:52
728x90

https://www.acmicpc.net/problem/1074

 

1074번: Z

한수는 크기가 2N × 2N인 2차원 배열을 Z모양으로 탐색하려고 한다. 예를 들어, 2×2배열을 왼쪽 위칸, 오른쪽 위칸, 왼쪽 아래칸, 오른쪽 아래칸 순서대로 방문하면 Z모양이다. N > 1인 경우, 배열을

www.acmicpc.net

N, r, c = map(int, input().split())
M = {1: 0}

def Z(n, x, y):
    if n in M:
        return M[n]
    else:
        n //= 2
        for i in range(2):
            for j in range(2):
                if x < n*(i+1) and y < n*(j+1):
                    ret = (2*i+j)*(n*n) + Z(n, x-n*i, y-n*j)
                    M[n] = ret
                    return ret

print(Z(2**N, r, c))

dictionary M = {1:0}을 정의 해주고,

n값이 M안에 있다면, key값으로 찾아서 value값을 반환해준다.

n이 1인 값부터 전부 저장해주므로, 재귀적으로 호출 될때마다 계산하는것이 아닌

저장된 값에서 불러오기만 하면 되므로 빠르게 계산할 수 있게 된다.

728x90