재귀함수는 주어졌다. 메모이제이션만 추가하즈아
import sys
# 메모이제이션 배열
memo = {}
def w(a, b, c, w_memo):
# 메모에 저장해놓은 값이 있다면 찾아온다.
if (a, b, c) in w_memo:
return w_memo[a, b, c]
if a <= 0 or b <= 0 or c <= 0:
result = 1
elif a > 20 or b > 20 or c > 20:
result = w(20, 20, 20, w_memo)
elif a < b < c:
result = w(a, b, c-1, w_memo) + w(a, b-1, c-1, w_memo) - w(a, b-1, c, w_memo)
else:
result = w(a-1, b, c, w_memo) + w(a-1, b-1, c, w_memo)
+ w(a-1, b, c-1, w_memo) - w(a-1, b-1, c-1, w_memo)
# 메모에 값 저장
w_memo[(a, b, c)] = result
print(w_memo)
return result
while True:
num1, num2, num3 = map(int, sys.stdin.readline().split())
ans = w(num1, num2, num3, memo)
if all([num1 == -1, num2 == -1, num3 == -1]):
break
print(f'w({num1}, {num2}, {num3}) = {ans}')