Algorithm/Online judge

[백준] 11051번 > 이항 계수 2

민철킹 2021. 2. 13. 21:37

www.acmicpc.net/problem/11051

 

11051번: 이항 계수 2

첫째 줄에 \(N\)과 \(K\)가 주어진다. (1 ≤ \(N\) ≤ 1,000, 0 ≤ \(K\) ≤ \(N\))

www.acmicpc.net

문제

자연수 N과 정수 K가 주어졌을 때 이항 계수 (NK)를 10,007로 나눈 나머지를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 1,000, 0 ≤ K  N)

출력

 (NK)를 10,007로 나눈 나머지를 출력한다.

예제 입력 1

5

2

예제 출력 1

10

 


풀이

이항 계수1 과 같은 방식으로 구현하니 (RecursionError)가 발생하여, factorial을 외장함수로 풀었더니 맞았다.

from math import factorial
n, k = map(int, input().split())
result = factorial(n) // (factorial(k) * factorial(n - k))
print(result % 10007)

근데 풀고나니 DP로 푸는 문제여서, 다시 풀어보았다.

파스칼의 삼각형을 통하여 구현하는 것이다.

n, k = map(int, input().split())
dp = [[0] * 1 for i in range(1001)]
dp[1].append(1)
for i in range(2, 1001):
    for j in range(1, i + 1):
        if j == 1:
            dp[i].append(1)
        elif j == i:
            dp[i].append(1)
        else:
            dp[i].append(dp[i - 1][j - 1] + dp[i - 1][j])
print(dp[n + 1][k + 1] % 10007)

이것이 파스칼의 삼각형이다.

반응형

'Algorithm > Online judge' 카테고리의 다른 글

[백준] 1676번 > 팩토리얼 0의 개수  (0) 2021.02.13
[백준] 9375번 > 패션왕 신해빈  (0) 2021.02.13
[백준] 11050번 > 이항 계수 1  (0) 2021.02.12
[백준] 3036번 > 링  (0) 2021.02.12
[백준] 11057번 > 오르막 수  (0) 2021.02.11