문 제
자연수 N과 정수 K가 주어졌을 때 이항 계수 {N}{K}를 구하는 프로그램을 작성하시오.
입 력
첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 0 ≤ K ≤ N)
5 2
출 력
{N}{K}를 출력한다.
10
코 드
using System;
using static System.Console;
using System.Linq;
namespace Algorithm
{
class Program
{
static void Main(string[] args)
{
int[] input = ReadLine().Split(' ').Select(int.Parse).ToArray();
int N = input[0];
int R = input[1];
int result = Molecule(N, R) / Factorial(N - R);
WriteLine(result);
}
static int Molecule(int N, int R)
{
int result = 1;
for (int i = N; i > R; i--)
result = result * i;
return result;
}
static int Factorial(int num)
{
if (num == 0)
return 1;
int result = 1;
while (num > 0)
{
result = result * num;
num--;
}
return result;
}
}
}
비교코드 - 1
공 부
1. 이항정리 & 이항계수 (이산수학)
- 이항정리란 두 항의 합에 대한 거듭제곱식에 대한 정리를 말한다!
위와 같이 n = 5 일 때 나열되는 계수들을 ‘이항계수’라고 하며, k와 n이 주어졌을 때, 아래와 같이 정리할 수 있다!
이러한 계수를 삼각형으로 쌓게되면 ‘파스칼의 삼각형’이 된다!
2. 런타임 에러(NZEF)
- Factorial 함수 부분에서 num이 0일 때 return 값을 0으로 설정해주니 발생하는 에러였다. N과 K의 값이 같을 때 분모가 0으로 나눠지는 현상이 일어나기 때문에 일어나는 ‘런타임 에러’!