알고리즘/BOJ

[C++] 백준 11051번 이항 계수 2

Jay, Lee 2021. 8. 5. 11:43

다이나믹 프로그래밍으로 풀어야하는 문제이다.

무지성으로 팩토리얼로 문제를 풀면 long long을 넘어가는 값이 생길 수 있다.

그래서 dp를 활용해서 모듈러 연산을 한 값을 집어넣으면 된다.

문제를 풀면서 C6262에러가 발생을 했었는데,

이 부분은 main 함수의 stack 메모리 영역이 부족해서 생기는 오류였다.

이런 경우에는 배열을 전역변수로 넘겨주면 간단하게 해결이 가능한데,

이 부분에 대해서는 메모리 공부를 제대로 해야할 것 같다.

 

#include <iostream>
#define divisor 10007
using namespace std;

int dp[1005][1005] = { 0, };

int main() {
	ios::sync_with_stdio(false);
	cin.tie(0);

	int x, y;
	cin >> x >> y;

	for (int i = 1; i <= x; i++) {
		for (int k = 0; k <= i; k++) {
			if (i == k || k == 0) {
				dp[i][k] = 1;
				continue;
			}
			dp[i][k] = (dp[i - 1][k - 1] + dp[i - 1][k]) % divisor;
		}
	}
	cout << dp[x][y] << '\n';

	return 0;
}