[ ALGORITHM ]/[ 백 준 ]

[BAEKJOON] 11051번 이항 계수 2

HiStar__ 2020. 7. 16. 20:35

문 제

 

소 스  코 드

#include<iostream>

constexpr int MAX_SIZE{ 1'000 };
int nCk(int n, int k);

int main() {
	int N, K;

	std::cin >> N >> K;

	std::cout << nCk (N, K);

	return 0;
}

int nCk(int n, int k) {
	static int arr[MAX_SIZE][MAX_SIZE];
	if (arr[n][k] > 0) return arr[n][k] % 10'007;
	else if (k == 0 || k == n) return arr[n][k] = 1;
	else return arr[n][k] = (nCk(n - 1, k - 1) + nCk(n - 1, k)) % 10'007;
	
}

 

풀 이

 

 

초보의 코딩 공부

서버 프로그래머를 목표로 하고 공부하고 있습니다.

studycl.tistory.com

이항 계수 1번과 같은 방법으로 푼다면 범위가 크기 때문에 문제가 발생할 수 있다.
만약 배열의 내부에 변경이 있다면 빠르게 넘어갈 수 있도록
메모이제이션(Memoization) 방법을 사용하여 구현을 해야한다.

만약, { N : 5, K : 2 }일 때, 함수가 시작하자 마자 변화한 값을 보여주는 그래프 이다.

13번의 1 2 3 4를 더한 10의 결과가 나온다.

 

출 력 값

 

 

문 제  출 처

문제 링크 : [ BAEKJOON ] : https://www.acmicpc.net/problem/11051

 

11051번: 이항 계수 2

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

www.acmicpc.net