※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※
이번에 볼 문제는 백준 2691번 문제인 이항 쇼다운이다.
문제는 아래 링크를 확인하자.
6591번: 이항 쇼다운
각 테스트 케이스에 대해서, 정답을 출력한다. 항상 정답이 231보다 작은 경우만 입력으로 주어진다.
www.acmicpc.net
주어지는 n과 k 값을 받아 입력이 끝날 때까지 이항계수를 계산해나가는 문제이다.
이항계수는 (n부터 하나씩 감소하는 k개의 수의 곱) / (1부터 하나씩 증가하는 k개의 수의 곱)으로 계산할 수 있다.
특히, 연속된 x개의 자연수의 곱에는 x의 배수가 무조건 있으므로 계산 과정에서 소수점이 나오지 않게 식을 만들 수 있다.
답안의 크기는 int범위 내이지만 중간 계산과정에서 int의 범위를 넘어설 수 있으므로 ans 변수를 long long으로 지정하였다.
아래는 제출한 소스코드이다.
#include <iostream>
using std::cin;
using std::cout;
int main()
{
std::ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int x, y;
cin >> x >> y;
while (x + y != 0) {
if (y > x - y) y = x - y;
long long ans = 1;
for (int i = 1;i <= y;i++) {
ans *= x;
ans /= i;
x--;
}
cout << ans << '\n';
cin >> x >> y;
}
return 0;
}
728x90
'BOJ' 카테고리의 다른 글
[BOJ 13975 // C++] 파일 합치기 3 (0) | 2021.03.02 |
---|---|
[BOJ 14698 // C++] 전생했더니 슬라임 연구자였던 건에 대하여 (Hard) (0) | 2021.03.01 |
[BOJ 16467 // C++] 병아리의 변신은 무죄 (0) | 2021.02.27 |
[BOJ 11404 // C++] 플로이드 (0) | 2021.02.26 |
[BOJ 14938 // C++] 서강그라운드 (0) | 2021.02.25 |