문 제

자연수 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으로 나눠지는 현상이 일어나기 때문에 일어나는 ‘런타임 에러’!