문제
자연수 N 과 정수 K 가 주어졌을 때 이항 계수 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으로 하지 않아도 됐지만 말이다.
| 코드가 이상하거나, 이해되지 않는 부분이 있다면 댓글 남겨주세요! + 더 좋은 풀이 방법이 있다면 알려주시면 감사하겠습니다! :) |
'Programming > C언어' 카테고리의 다른 글
| [백준] 19532번 : 수학은 비대면강의입니다 (C언어 / C99) (0) | 2023.01.21 |
|---|---|
| [백준] 2355번 : 시그마 (C언어 / C99) (0) | 2023.01.20 |
| [백준] 1292번 : 쉽게 푸는 문제 (C언어 / C99) (0) | 2023.01.17 |
| [백준] 1977번 : 완전제곱수 (C언어 / C99) (0) | 2023.01.16 |
| [백준] 9501번 : 꿍의 우주여행 (C언어 / C99) (2) | 2023.01.14 |