반응형
Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

코딩하기 좋은날

백준 6591 이항 쇼다운 본문

백준(Baekjoon) 문제

백준 6591 이항 쇼다운

huiung 2019. 2. 22. 16:41
반응형

https://www.acmicpc.net/problem/6591

문제와 채점은 위 사이트에서 확인 하실 수 있습니다

 

이 문제는 nCk를 구하는 문제입니다. 이때 n과 k가 각각 2^31-1 까지 가능하다고 되어 있습니다. 

 

그리고 nCk의 결과값은 항상 2^31보다 작다고 되어 있으므로 아주큰 n과 k를 입력받아도 21억을 못넘으므로 그렇게 연산 횟수가 많지 않을 것이므로 nCk = nPk / k! 을 이용해서 그냥 구해주면 됩니다.

 

이때 주의할 점은 nCk = nCn-k 이므로 만일  1000C998 이 입력된다면 998번 연산을 하는 것이 아니라 1000C2로 바꾸어 생각하여 2번만 연산을 하게 해주어야 시간초과를 피할 수 있습니다. 그리고 답은 int형 범위 안이지만 계산하는 과정에서 그값이 초과 될 수 있으므로 계산하는 변수는 long long으로 선언해주어야 합니다.

 

다음은 코드입니다.

 

#include <iostream>

using namespace std;

int main(void) {
	ios_base::sync_with_stdio(false); cin.tie(NULL);
	int n,k;
	
	while(cin >> n) {
		cin >> k;
		if(n == 0 && k ==0)
			break; 
		long long ans = 1;
		
		
		if(k > n/2)
			k = n-k;
		
		for(int i = 1; i <= k; i++) {
			ans *= n;
			ans /= i;
			n--;
		}
		cout<<ans<<'\n';
		
	}
	return 0;
}

 

반응형

'백준(Baekjoon) 문제' 카테고리의 다른 글

백준 1149 RGB 거리  (0) 2019.02.22
백준 1932 정수 삼각형  (0) 2019.02.22
백준 1676 팩토리얼 0의 개수  (0) 2019.02.21
백준 1003 피보나치 함수  (0) 2019.02.21
백준 1021회전하는 큐  (0) 2019.02.19