<백준> 1947

진기명기·어제

코딩테스트<C++>

목록 보기
204/212

선물 전달

문제
이번 ACM-ICPC 대회에 참가한 모든 사람들은 선물을 하나씩 준비했다.
대회가 끝나고 난 후에 각자 선물을 전달하려고 할 때, 선물을 나누는 경우의 수를 구하는 프로그램을 작성하시오.
모든 사람은 선물을 하나씩 받으며, 자기의 선물을 자기가 받는 경우는 없다.

입력
첫째 줄에 ACM-ICPC 대회에 참가한 학생의 수 N(1 ≤ N ≤ 1,000,000)이 주어진다.

출력
경우의 수를 1,000,000,000으로 나눈 나머지를 첫째 줄에 출력한다.

long d[1000001];

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

	long n;
	cin >> n;

	d[0] = 0;
	d[1] = 0;
	d[2] = 1;
	d[3] = 2;

	for (int i = 4; i <= n; i++)
	{
		d[i] = ((i - 1) * (d[i - 1] + d[i - 2])) % 1000000000;
	}

	cout << d[n];
}

0개의 댓글