import sys
input = sys.stdin.readline
sys.setrecursionlimit(10 ** 7)
n, k = map(int, input().split())
result=[[0]*1000 for _ in range(1000)]
def bino(x,y):
if y == x or y == 0:
result[x][y] = 1
return bino(x-1,y-1) + bino(x-1,y)
num = 10007
print(bino(n,k) % num)
Top-down 방식으로 코드를 짰는데 에러가 계속 떴다..
import sys
input = sys.stdin.readline
sys.setrecursionlimit(10 ** 7)
n, k = map(int, input().split())
result=[[0]*1001 for _ in range(1001)]
def bino(x,y):
if result[x][y]:
return result[x][y]
if x == y or y == 0:
return 1
else:
result[x][y] = bino(x-1,y-1) + bino(x-1,y)
return result[x][y]
num = 10007
print(bino(n,k) % num)
import sys
input = sys.stdin.readline
n, k = map(int, input().split())
result=[[0]*1001 for _ in range(1001)]
for i in range(n+1):
for j in range(k+1):
if i == j or j == 0:
result[i][j] = 1
else:
result[i][j] = result[i-1][j-1] + result[i-1][j]
num = 10007
print(result[n][k] % num)
Top-down 방식은 다른 사람 코드를 참고한 것이고, Bottom-up은 내가 직접 짜봤다.
아직 재귀 함수에 대한 공부가 더 필요한 것 같다.
재귀함수
를 사용할 때 무조건
필수적으로
써야하는 코드라고 한다. 파이썬의 재귀 깊이는 1000으로 얕기 때문에 sys.setrecursionlimit(1000 ** 7) 등으로 설정하여 재귀 깊이를 늘리자. 그렇지 않으면 알 수 없는 런타임 에러에 시달리게 된다.