[백준 11051] 이항 계수 2

yukongs·2024년 2월 19일
0

내가 작성한 코드

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 방식으로 코드를 짰는데 에러가 계속 떴다..

정답 제출 코드 (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)

정답 제출 코드 (Bottom-up)

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은 내가 직접 짜봤다.
아직 재귀 함수에 대한 공부가 더 필요한 것 같다.


배운 점

  1. sys.setrecursionlimit()
    코테에서 재귀함수를 사용할 때 무조건 필수적으로 써야하는 코드라고 한다. 파이썬의 재귀 깊이는 1000으로 얕기 때문에 sys.setrecursionlimit(1000 ** 7) 등으로 설정하여 재귀 깊이를 늘리자. 그렇지 않으면 알 수 없는 런타임 에러에 시달리게 된다.
profile
보안/개발/대학생

0개의 댓글

관련 채용 정보