fragment-header
fragment-markdown
홈
로그인
로그아웃
내 블로그
설정
로그인
백준 1947 (C++) 선물 전달
최초 업로드: 2025-07-18 19:29:28
최근 수정 시간: 2025-07-25 08:44:03
게시자: rlatjwls3333
카테고리: 백준
조회수: 6
# [Gold III] 선물 전달 [문제 링크](https://www.acmicpc.net/problem/1947) ## 문제 설명 <p>이번 ACM-ICPC 대회에 참가한 모든 사람들은 선물을 하나씩 준비했다.</p> <p>대회가 끝나고 난 후에 각자 선물을 전달하려고 할 때, 선물을 나누는 경우의 수를 구하는 프로그램을 작성하시오.</p> <p>모든 사람은 선물을 하나씩 받으며, 자기의 선물을 자기가 받는 경우는 없다.</p> ## 입력 <p>첫째 줄에 ACM-ICPC 대회에 참가한 학생의 수 N(1 ≤ N ≤ 1,000,000)이 주어진다.</p> ## 출력 <p>경우의 수를 1,000,000,000으로 나눈 나머지를 첫째 줄에 출력한다.</p> ## 풀이 #### 완전 순열을 구하는 문제였다. 이것을 구하는 방법을 이번에 [이 사이트](https://j1w2k3.tistory.com/667)에서 공부하였다. ``` c++ #include<bits/stdc++.h> using namespace std; const long long MOD = 1e9; const int MAX = 1e6+1; long long dp[MAX]; int main() { ios::sync_with_stdio(0); cin.tie(0); int n; cin >> n; dp[1]=0; dp[2]=1; for(int i=3;i<=n;i++) { dp[i] = (i-1)*(dp[i-2]+dp[i-1])%MOD; } cout << dp[n]; } ```