728x90
728x90
문제
자연수 `N`과 정수 `K`가 주어졌을 때 이항 계수 ${N \choose K}$를 구하는 프로그램을 작성하시오.
입력
첫째 줄에 `N`과 `K`가 주어진다. ($1 ≤ N ≤ 10, 0 ≤ K ≤ N$)
출력
${N \choose K}$ 를 출력한다.
예제 입력 1
5 2
예제 출력 1
10
알고리즘 분류
- 수학
- 구현
- 조합론
문제 출처
https://www.acmicpc.net/problem/11050
문제 해결 방법
- 이항 계수를 구하는 알고리즘을 이용하여 문제를 해결하였다.
- 관련 게시글 : https://dev-astra.tistory.com/276
int nCk(int n, int k) {
if (k > n) {
return 0;
}
if (k == 0 || k == n) {
return 1;
}
return nCk(n - 1, k - 1) + nCk(n - 1, k);
}
- 혹은 다음과 같이 메모이제이션(Memoization)을 이용하여 문제를 풀 수 있다.
int dp[11][11];
int nCk(int n, int k) {
if (dp[n][k] > 0) return dp[n][k];
else if (k == 0 || k == n) return dp[n][k] = 1;
else if ((0 < k) && (k < n)) return dp[n][k] = nCk(n - 1, k - 1) + nCk(n - 1, k);
else return 0;
}
코드
#include <iostream>
using namespace std;
int N, K;
int nCk(int n, int k) {
if (k > n) {
return 0;
}
if (k == 0 || k == n) {
return 1;
}
return nCk(n - 1, k - 1) + nCk(n - 1, k);
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin.tie(NULL);
cin >> N >> K;
cout << nCk(N, K) << '\n';
return 0;
}
채점 결과
참고
- [단계별로 풀어보기] > [정수론 및 조합론]
- 브론즈I
728x90
728x90
'Problem Solving > BOJ' 카테고리의 다른 글
[BOJ-1676][C++] 팩토리얼 0의 개수 (0) | 2022.11.15 |
---|---|
[BOJ-9375][C++] 패션왕 신해빈 (0) | 2022.11.15 |
[BOJ-1010][C++] 다리 놓기 (0) | 2022.11.15 |
[BOJ-11051][C++] 이항 계수 2 (0) | 2022.11.15 |
[BOJ-3036][C++] 링 (0) | 2022.11.13 |
[BOJ-2981][C++] 검문 (0) | 2022.11.13 |
[BOJ-1934][C++] 최소공배수 (0) | 2022.11.13 |
[BOJ-2609][C++] 최대공약수와 최소공배수 (0) | 2022.11.13 |