728x90
반응형
11050번과 11051번은 문제에서 주어지는 입력 값의 범위만 다르고 똑같은 문제이다.
11051번 문제를 기준으로 풀이해보려한다.
https://www.acmicpc.net/problem/11051
이항 계수 풀이법은 두 가지로 나뉜다.
1. 반복문 사용
모두 알다시피 조합을 구하는 식은 아래와 같다.
$$ nCr =\frac{nPr}{r!} $$
이렇게 반복문을 사용하여 조합을 구하는 방법이 있다.
<반복문 사용 코드>
import sys
n, k = map(int, sys.stdin.readline().split())
res=1
for i in range(k):
res=res*(n-i)
for i in range(1,k+1):
res=res//i
print(res)
2. 파스칼의 삼각형 사용
파스칼의 삼각형은 조합, 즉 이항 계수를 삼각형으로 나타낸 모습이다.
위를 수식으로 나타내면 아래와 같다.
$$ nCr=(n-1)C(r-1)+(n-1)Cr $$
파스칼의 삼각형을 사용하면 이 문제는 동적 계획법(dynamic programming) 문제가 된다.
이중 리스트로 모든 이항 계수의 값을 구한 다음 문제를 풀 수 있다.
<파스칼의 삼각형 사용 코드>
import sys
n, k = map(int, sys.stdin.readline().split())
dp=[[1]*(n+1) for _ in range(n+1)]
for i in range(2, n+1):
for j in range(1, i):
dp[i][j] = dp[i-1][j-1]+dp[i-1][j]
print(dp[n][k]%10007)
728x90
반응형
'백준 알고리즘 > 기타' 카테고리의 다른 글
[백준 1927][파이썬] 최소 힙. 파이썬 heapq 모듈 사용법 (우선순위 큐) (0) | 2023.03.13 |
---|---|
[백준 1629][파이썬] 곱셈 (0) | 2023.02.28 |
[백준 1541][파이썬] 잃어버린 괄호 (0) | 2023.02.27 |
[백준 10986][파이썬] 나머지 합 (0) | 2023.02.21 |
[백준 1004][파이썬] 어린 왕자 (0) | 2023.02.16 |
댓글