문제

자연수 과 정수 가 주어졌을 때 이항 계수 nCk 를 구하는 프로그램을 작성하시오.

 

 

조건 및 입출력

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

2. 이항 계수 nCk 를 출력한다.

 

 

코드
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

long long fact(int n); // 펙토리얼 구하는 함수
int main(void)
{
	int n, k;
	scanf("%d %d", &n, &k);

	long long result = 0;
	result = fact(n) / (fact(n - k) * fact(k)); // 조합 기본 정의

	printf("%lld", result);

	return 0;
}

long long fact(int n)
{
	long long result = 1;
	for (int i = 1; i <= n; i++)
		result *= i;

	return result;
}

 

 

풀이 과정

펙토리얼을 호출하는 함수를 따로 하나 만들었다.

n!= n*(n-1)*(n-2)*...1이므로, for문을 이용해서 1부터 n까지 곱하는 함수를 만들었다.

 

그 후 조합의 기본 정의에 의해서 n!/((n-k)!*k!)식을 작성하면 조합을 구할 수 있다.

 

펙토리얼은 n의 값이 조금만 커져도 결과값이 기하급수적으로 커지기 때문에 자료형을 long long으로 하였다.

물론 문제에선 n이 10을 초과하지 않는다고 했으므로 굳이 long long으로 하지 않아도 됐지만 말이다.

 

 


코드가 이상하거나, 이해되지 않는 부분이 있다면 댓글 남겨주세요!

+ 더 좋은 풀이 방법이 있다면 알려주시면 감사하겠습니다! :)

+ Recent posts