본문 바로가기

BOJ

백준 1010 / 다리 놓기





M개 중에 중복없이 N개를 고르는 경우의 수 : 


MC(콤비네이션)N

해결법은 생각해내기 쉽지만 문제는 수의 범위다.

0<N<=M<=30이기 떄문에

M=30 , N=15일 때 답인 30C15는 long long도 못담는다.

그렇기에 따로 함수를 만들어줘야되는데


큰 수의 표현인 Big integer는 구현이 힘들기 떄문에


그냥 간단한 함수를 만들었다.


30*29*28........*16*15

----------------------

15* 14*13.......*2*1


일때 분모에 있는 15부터 분자로 나누어 0되는 수를 찾은 후 나눈다음 15를 1로 만들어주는 함수.





코드는


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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include <stdio.h>
#include <iostream>
#include<vector>
 
using namespace std;
long long ans = 1;
 
vector<int>a;
vector<int>b;
 
 
void check() {
    for (int i = 0; i < b.size(); i++) {
        for (int j = 0; j < a.size(); j++) {
            if (a[j] % b[i] == 0 && b[i]!=1) {
                a[j] = a[j] / b[i];
                b[i] = 1;
                break;
            }
        }
    }
 
    long long up=1;
    long long down=1;
 
 
    for (int i = 0; i < a.size(); i++) {
        up = up * a[i];
    }
    for (int i = 0; i < b.size(); i++) {
        down = down * b[i];
    }
    
    ans = up / down;
 
}
 
 
 
int main() {
 
    //freopen("Text.txt", "r", stdin);
    int testcase;
    cin >> testcase;
 
    while (testcase--) {
        int n, m;
        cin >> n >> m;
        
        int c;
        c = n;
            
        if (n == 0 || m == 0) {
            ans = 0;
        }
        else {
            for (int i = 0; i < n; i++) {
                a.push_back(m);
                m--;
            }
            for (int i = 0; i < n; i++) {
                b.push_back(c);
                c--;
            }
 
            check();
    
        }
        cout << ans << endl;
        a.clear();
        b.clear();
        ans = 1;
 
    }
}

c


테스트케이스가 여러번이기 때문에 테스트가 끝난 후 초기화시켜주는 걸 잊지말자.

'BOJ' 카테고리의 다른 글

백준 1012 / 유기농 배추  (0) 2018.12.31
백준 1389 / 케빈 베이컨의 6단계 법칙  (0) 2018.12.30
백준 2225 / 합분해  (0) 2018.12.29
백준 1699 / 제곱수의 합  (0) 2018.12.29
백준 1912 / 연속합  (0) 2018.12.28