Algorithm/BAEKJOON
[C#]백준 1010 다리 놓기 - Hide
zz0zz9
2024. 11. 7. 23:34
반응형
반응형
https://www.acmicpc.net/problem/1010
문제 요약
다리를 지을 수 있는 경우의 수 출력하기
참고 1
다리끼리는 서로 겹칠 수 없다 => 사랑의 짝대기 X모양 불가능
M개에서 N개를 선택하는 경우의 수 공식
=> 코딩으로 구현 시
Console.WriteLine(F(m) / (F(n)*F(m-n)));
long F(int n)
{
long s = 1;
for (int i=2; i<= n; i++) s*=i;
return s;
}
하지만 범위가 long을 벗어날 수 있다.
=> 분자와 분모가 겹치는 경우 미리 제거 가능
예를 들어 C(5,1)의 경우
4*3*2*1이 겹치기 때문에 5/1로 수식을 세울 수 있다.
풀이
int n = int.Parse(Console.ReadLine());
while (n-- > 0)
{
var t = Console.ReadLine().Split().Select(int.Parse).ToArray();
long s = 1;
for (int i = 0; i < t[0]; i++) s = s * (t[1] - i) / (i + 1);
Console.WriteLine(s);
}
숫자가 커질 수 있으니 s는 long형식, 곱하고 나눠야 하니까 초기값은 1.
<반복문> i는 0 ~ t[0](예제에선 2,1,13에 해당)
s*(t[1]-i)(예제에선 2,5,29에 해당)/(i+1)
부여알밤 롯샌 맛있음!
반응형