- 문제 링크 : boj.kr/26524
- 난이도 : G5
- 태그 : 그래프, 조합론
26524번: 방향 정하기
첫 번째 줄에 $n$이 주어진다. $(2 \leq n \leq 1\,000\,000)$
www.acmicpc.net
코드
#include <bits/stdc++.h>
#define all(x) (x).begin(), (x).end()
#define INF 0x7FFFFFFF
using namespace std;
using ll = long long;
using ld = long double;
using pii = pair<int,int>;
using pll = pair<ll, ll>;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int n;
cin >> n;
ll ans = 1;
for(ll i = 1; i <= n; i++) {
ans *= i;
ans %= 1000000007ll;
}
cout << ans;
return 0;
}
풀이
어떤 한 점 $A_i$에 대해서 나가는 방향의 간선과 연결된 점의 집합을 $O_i$, 들어오는 방향의 간선과 연결된 점의 집합을 $I_i$라고 하자.
$|O_i|=N$인 어떤 i는 반드시 하나가 존재한다. 만약 이런 점이 존재하지 않는다고 해보자.
그렇다면 임의의 점 k에 대해 $|O_k|$는 $N-1$이하이고, $|I_k|$는 1이상일 것이다. 이때 $O_k$의 어떤 점에서 $I_k$의 어떤 점으로 향하는 간선이 없어야 한다. 따라서 $I_k$의 모든 점 x에 대해 $|O_x| \ge |O_k| + 1$이다. 반복해보면 $|O_i|=N$인 어떤 i는 반드시 하나가 존재함을 보일 수 있다.
$|O_i|=N$인 어떤 점 $A_i$는 다른 N-1개의 점에 대해 독립적이다. 따라서 남은 N-1개의 점을 분석하기 위해 앞의 방법을 똑같이 이용할 수 있다. 반복하면 각각의 점에 대해 나가는 방향의 간선이 $N, N-1, N-2, \cdots, 1$임을 알 수 있다.
이제 어떤 점이 몇 개의 나가는 방향의 간선을 가질지 매칭하는 문제로 바뀌게 되고, 이는 N!임을 알 수 있다.
728x90
'PS' 카테고리의 다른 글
BOJ 12764 : 싸지방에 간 준하 (0) | 2024.04.01 |
---|---|
BOJ 12934 : 턴 게임 (0) | 2024.03.31 |
BOJ 12796 : 나의 행렬곱셈 답사기 (0) | 2024.03.29 |
BOJ 17298 : 오큰수 (0) | 2024.03.28 |
BOJ 2493 : 탑 (0) | 2024.03.27 |