Published:
Updated:


Solution

N, K = map(int, input().split())


def dp(n, r):
    # (n + 1) * (r + 1)인 캐시 생성
    cache = [[0 for _ in range(r + 1)] for _ in range(n + 1)]

    # 캐시 초기화
    # (r == 0 or n == r) -> 캐시가 1이 됨
    # 조합 문제 풀 때 5C0이랑 5C5랑 1로 똑같았잖아? 그거랑 같다고 생각하면 돼
    for i in range(n + 1):
        cache[i][0] = 1
    for i in range(r + 1):
        cache[i][i] = 1

    # 실제 값 구하는 메인 로직
    for i in range(1, n + 1):
        for j in range(1, r + 1):
            # i개의 아이템 중, j개의 아이템을 선택하는 경우의 수: 그보다 작은 두 값의 합
            cache[i][j] = cache[i - 1][j] + cache[i - 1][j - 1]

    return cache[n][r]


print(dp(N, K))

Leave a comment