문제 링크입니다: https://www.acmicpc.net/problem/11051
이산수학 과목에서 이미 조합을 구하는 점화식을 배웠으므로 쉽게 풀 수 있었던 문제였습니다.
/*
자연수 N과 정수 K가 주어졌을 때 이항 계수 (N, K)를 10,007로 나눈 나머지를 구하는 프로그램을 작성하시오.
*/
#include <iostream>
#include <cstring> //memset
using namespace std;
const int MAX = 1001;
const int MOD = 10007;
int N, K; //주어진 수
int cache[MAX][MAX];
int binomialCoef(void) //이항계수
{
for (int i = 1; i <= N; i++)
{
//Combination(i, 1)=i, Combination(i, i)=1, Combination(i, 0)=1
cache[i][1] = i;
cache[i][i] = cache[i][0] = 1;
}
for (int i = 3; i <= N; i++)
for (int j = 2; j < i; j++)
//공식
cache[i][j] = (cache[i - 1][j - 1] + cache[i - 1][j]) % MOD;
return cache[N][K] % MOD;
}
int main(void)
{
cin >> N >> K;
if (N < 1 || N >= MAX || K<0 || K>N)
exit(-1);
cout << binomialCoef() << endl;
return 0;
}
개발환경:Visual Studio 2017
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
'알고리즘 > BOJ' 카테고리의 다른 글
백준 2096번 내려가기 (0) | 2018.03.03 |
---|---|
백준 1890번 점프 (0) | 2018.03.02 |
백준 6359번 만취한 상범 (0) | 2018.03.01 |
백준 1937번 욕심쟁이 판다 (0) | 2018.03.01 |
백준 1309번 동물원 (0) | 2018.02.28 |