본문 바로가기

알고리즘/백준

[백준] 9184번 : 신나는함수실행

728x90

9184번: 신나는 함수 실행

해당문제는 메모리제이션 문제로 함수 return 끝에 이미 계산한 값을 저장하는 배열을 만들어서 저장한뒤 결과를 return 하면된다.

import sys
input = sys.stdin.readline

dp = [[[-1 for _ in range(21)] for _ in range(21)] for _ in range(21)]

def dfs(a, b, c):
    if a <= 0 or b <= 0 or c <= 0:
        return 1

    if a > 20 or b > 20 or c > 20:
        return dfs(20, 20, 20)

    if dp[a][b][c] != -1:
        return dp[a][b][c]

    if a < b < c:
        dp[a][b][c] = dfs(a,b,c-1) + dfs(a, b-1, c-1) - dfs(a, b-1, c)
        return dp[a][b][c]

    cost = dfs(a - 1, b, c) + dfs(a - 1, b - 1, c) + dfs(a - 1, b, c - 1) - dfs(a - 1, b - 1, c - 1)
    dp[a][b][c] = cost
    return dp[a][b][c]

while True:
    a, b, c = map(int, input().split())
    if a == -1 and b == -1 and c == -1:
        break

    print('w({}, {}, {}) = {}'.format(a, b, c, dfs(a,b,c)))

 

728x90

'알고리즘 > 백준' 카테고리의 다른 글

[백준] 1189번 : 컴백홈  (0) 2023.10.18
[백준] 7579번 : 앱  (0) 2023.10.18
[백준] 1062번 : 가르침  (1) 2023.10.17
[백준] 4485번 : 녹색 옷 입은 애가 젤다지?  (1) 2023.10.17
[백준] 1162번 : 도로포장  (0) 2023.10.17