자연수 (N)과 정수 (K)가 주어졌을 때 이항 계수를 구하는 프로그램을 작성하시오.
입력
- 첫째 줄에 (N)과 (K)가 주어진다. (1 ≤ (N) ≤10, 0 ≤ (K) ≤ (N))
출력
- 이항계수 출력
참고
세 가지 방법이 있다고 한다.
... 이라는데 결론은 각 케이스 별로 선택하냐 하지 않느냐가 합쳐진 경우의 수를 구하는 것이다.
DFS 알고리즘과 재귀 함수를 이용하면 될것이라고 생각한다.
namespace SongE
{
public class Program
{
static int[,] dy;
static int DFS(int n, int r)
{
if (dy[n, r] > 0) return dy[n, r];
if (r == 0 || n == r) return 1;
else return dy[n, r] = DFS(n - 1, r) + DFS(n - 1, r - 1);
}
static void Main(string[] args)
{
using var input = new System.IO.StreamReader(Console.OpenStandardInput());
using var print = new System.IO.StreamWriter(Console.OpenStandardOutput());
int[] n = Array.ConvertAll(input.ReadLine().Split(), s => int.Parse(s));
dy = new int[n[0] + 1, n[1] + 1];
print.Write(DFS(n[0], n[1]));
}
}
}