읽기 전

  • 불필요한 코드나 잘못 작성된 내용에 대한 지적은 언제나 환영합니다.
  • 개인적으로 배운 점을 정리한 글입니다.

문제 링크

문제 #11051 이항 계수 2

문제 풀이

$\binom n x$이 $\binom {n-1} {r-1} + \binom {n-1} {r}$임을 알아야 풀 수 있는 문제였다. 해당 공식은 파스칼 삼각형으로 간단히 알 수 있다. 그러면 초항을 잡아야 하는데 n = r이거나 r = 0이면 1을 고정값으로 갖는다. 따라서 재귀호출로 구현하되 종료 조건을 n = r 혹은 r = 0이면 1을 리턴하도록 하면 된다. 다만, 재귀호출로만 구현하면 이미 구했던 조합도 다시 구하게 되어 시간초과를 출력하니 배열을 생성하여 이미 구했던 값이면 다시 계산하지 않도록 한다.

python 코드

import sys
sys.setrecursionlimit(10**9)
input = sys.stdin.readline

def solve():
    N, K = map(int, input().split())
    dp = [[0] * (K + 1) for _ in range(N + 1)]
    def pascal(n, r):
        if n == r or r == 0:
            return 1
        if dp[n][r] > 0:
            return dp[n][r]
        dp[n][r] = (pascal(n - 1, r - 1) + pascal(n - 1, r)) % 10007
        return dp[n][r]
    print(pascal(N, K))
solve()

'Algorithms > Baekjoon' 카테고리의 다른 글

BOJ #1202 보석 도둑  (0) 2021.08.12
BOJ #1107 리모컨  (0) 2021.08.10
BOJ #10217 KCM Travel  (0) 2021.08.01
BOJ #9251 LCS  (0) 2021.07.28
BOJ #11054 가장 긴 바이토닉 부분 수열  (0) 2021.07.28

+ Recent posts