코딩테스트
[백준] 선물 전달 c++
코딩너구리
2025. 2. 19. 13:16
선물 전달
시간 제한메모리 제한제출정답맞힌 사람정답 비율
2 초 | 128 MB | 5402 | 2752 | 2266 | 50.773% |
문제
이번 ACM-ICPC 대회에 참가한 모든 사람들은 선물을 하나씩 준비했다.
대회가 끝나고 난 후에 각자 선물을 전달하려고 할 때, 선물을 나누는 경우의 수를 구하는 프로그램을 작성하시오.
모든 사람은 선물을 하나씩 받으며, 자기의 선물을 자기가 받는 경우는 없다.
입력
첫째 줄에 ACM-ICPC 대회에 참가한 학생의 수 N(1 ≤ N ≤ 1,000,000)이 주어진다.
출력
경우의 수를 1,000,000,000으로 나눈 나머지를 첫째 줄에 출력한다.
#include <iostream>
using namespace std;
int N;
int mod = 1000000000;
long D[1000001];
int main()
{
cin >> N;
D[1] = 0; // 혼자서는 선물 교환 X
D[2] = 1; // 2명일 경우엔 교환이 오로지 1번
for (int i = 3; i <= N; i++)
{
//i명이 교환할 수 있는 경우의 수(점화식)
D[i] = (i - 1) * (D[i - 1] + D[i - 2]) % mod;
//값을 넣기전에 마지막에 % mod 연산 수행 (문제 요청사항)
}
cout << D[N];
}