728x90
반응형
<문제 링크>
https://www.acmicpc.net/problem/11051
<풀이>
N과 K를 입력 받아 nCk의 결과를 출력하는 문제이다.
nCk는 n! / k!(n-k)!이다. (N과 K의 범위는 문제 참고)
그런데 N!, K!, (N-K)!를 구할 때 중복된 계산이 많기 때문에 비효율적이다.
그렇기 때문에 동적 프로그래밍을 이용한다면 효율적으로 계산할 수 있다.
나는 dp를 만들고 인덱스에 해당 팩토리얼 결과값을 넣었다.
예로 1번째 인덱스, 2번째 인덱스, 그리고 3번째 인덱스 값이 순서대로 1, 2, 6인데 3번째 인덱스 값을 구할 때, 1x2x3 할 필요 없이 2번째 인덱스 결과값 x 3만 해주면 된다.
간단하게 i의 팩토리얼 값을 구하기 위해서는 i-1번째 값에다가 i만 곱해주면 된다.
<코드>
dp[]: 팩토리얼 결과를 저장한 리스트
import sys
if __name__ == "__main__":
N, K = map(int, sys.stdin.readline().split())
dp = [1, 1, 2]
for i in range(3, N+1):
dp.append(dp[i-1] * i)
print((dp[N] // (dp[N-K] * dp[K])) % 10007)
728x90
반응형
'~2023' 카테고리의 다른 글
[Markdown] 마크다운 이미지 삽입 및 이미지 크기 조절 (0) | 2021.09.17 |
---|---|
[Python] 백준 14503번 문제, 로봇 청소기 (0) | 2021.08.30 |
[Python] 백준 14502번 문제, 연구소 (0) | 2021.08.23 |
[Python] 백준 1932번 문제, 정수 삼각형 (0) | 2021.08.23 |
[Python] 백준 9663번 문제, N-Queen (0) | 2021.08.20 |