‡ CODING TEST STUDY ‡/º 백준

[백준 2407번] 조합

Trudy | 송연 2023. 8. 26. 03:05

2407번: 조합 (acmicpc.net)

 

2407번: 조합

n과 m이 주어진다. (5 ≤ n ≤ 100, 5 ≤ m ≤ 100, m ≤ n)

www.acmicpc.net

처음에는 조합을 계산하는 방식을 for문을 돌려서 그대로 표현하려고 했다

근데 정수로 받다 보니까 원하는 대로 되지 않음

    for(int i=0; i<s; i++){
        r *= n;
        n--;
        r /= m;
        m--;
    }
    
    cout << r << endl;
    
    for(m; m>0; m--){
        r /= m;
    }

그러다가 재귀를 사용해서 팩토리얼 함수를 만든 게 기억이 났다

 

#include <iostream>

using namespace std;

int factorial(int a){
    if(a==0 || a==1) return 1;
    return a*factorial(a-1);
}

int main()
{
    long n, m; 
    cin >> n >> m;
    
    long r = factorial(n)/factorial(m);
    cout << r << endl;
    r /= factorial(n-m);
    
    cout << r << endl;
    
    return 0;
}

근데 숫자가 너무 커서 0으로 출력이 되어버림

검색해보니 string으로 변환해서 써줘야했던 것

 

[백준] 2407번 : 조합 [C/C++] — 백준 하루 한 문제 (tistory.com)

 

[백준] 2407번 : 조합 [C/C++]

#문제 2407번: 조합 https://www.acmicpc.net/problem/2407 2407번: 조합 n과 m이 주어진다. (5 ≤ n ≤ 100, 5 ≤ m ≤ 100, m ≤ n) www.acmicpc.net #접근방법 조합을 구하는 식 (nCm = n-1Cm-1 + n-1Cm)을 이용하고, long long 범위

rujang.tistory.com

1. nCm = n-1Cm-1 + n-1Cm 성질 이용하기

2. string으로 큰 수 덧셈하기

 

(???)

 

++

큰 수 덧셈/더하기 알고리즘 구현 (C++) (백준 BOJ 15353 : 큰 수 A+B) (tistory.com)