DHistory

[Baekjoon] DP - 9184 신나는 함수 실행 본문

Computer Science/Algorithm

[Baekjoon] DP - 9184 신나는 함수 실행

ddu0422 2024. 8. 20. 22:26

문제

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

 

풀이

재귀함수 호출 결과를 미리 저장한다. (팩토리얼 문제와 유사)

함수를 호출하는 부분을 미리 저장한 내용을 불러오면 된다.

 

코드

import sys

number = [[[0 for _ in range(21)] for _ in range(21)] for _ in range(21)]

def w(a, b, c):
    if a <= 0 or b <= 0 or c <= 0:
        return 1
    
    if a > 20 or b > 20 or c > 20:
        return number[20][20][20]
    
    if a < b and b < c:
        return number[a][b][c - 1] + number[a][b - 1][c - 1] - number[a][b - 1][c]
    
    return number[a - 1][b][c] + number[a - 1][b - 1][c] + number[a - 1][b][c - 1] - number[a - 1][b - 1][c - 1]


for i in range(21):
    for j in range(21):
        for k in range(21):
            number[i][j][k] = w(i, j, k)


while True:
    a, b, c = map(int, sys.stdin.readline().strip().split())

    if a == -1 and  b == -1 and c == -1:
        break

    print(f'w({a}, {b}, {c}) = {w(a, b, c)}')