💡문제접근
- 소스 코드의 함수를 그대로 구현하면 간단하지만 a, b, c의 값이 큰 값일 경우 값을 계산하는데 매우 오랜 시간이 걸린다. 따라서 dp배열을 이용해서 만약 값이 존재한다면 함수를 호출하지말고 그대로 그 값을 반환해주는 방식으로 코드를 작성했다.
💡코드
import sys
input = sys.stdin.readline
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 w(20, 20, 20)
if dp[a][b][c]:
return dp[a][b][c]
if a < b < c:
dp[a][b][c] = w(a, b, c-1) + w(a, b-1, c-1) - w(a, b-1, c)
return dp[a][b][c]
dp[a][b][c] = w(a-1, b, c) + w(a-1, b-1, c) + w(a-1, b, c-1) - w(a-1, b-1, c-1)
return dp[a][b][c]
dp = [[[0] * (21) for _ in range(21)] for _ in range(21)]
while True:
A, B, C = map(int, input().strip().split())
if A == -1 and B == -1 and C == -1:
break
else:
print(f"w({A}, {B}, {C}) = {w(A, B, C)}")
💡소요시간 : 20m