포스트

[공부] 백준 11050 이항 계수 1 C++

[공부] 백준 11050 이항 계수 1 C++

📝 문제


🔍 문제 상황

문제 상황


💡 해결 방법 / 접근 방식

  • 우선, 문제는 2개의 입력을 받고, 2개의 입력에 대한 이항 계수를 구하는 문제입니다.

이항 계수(Binomial Coefficient)란?

  • 주어진 크기 집합에서 원하는 개수만큼 순서 없이 뽑는 조합의 가짓수를 일컫습니다. 공식
  • 위와 같이 공식을 가지고 있으며, 복잡해보이지만 단순하게 보면 n! / (n-k)!k! 공식을 확인할 수 있습니다.
  • 출처: https://shoark7.github.io/programming/algorithm/3-ways-to-get-binomial-coefficients

    접근 방식

  • 위에서 파악한 공식이 이항 계수 = n! / (n-k)!k! 이기에,
  • 우선 각 팩토리얼을 구한 후 나누기 및 곱하기를 진행해도 괜찮을 것 같다는 생각이 들었습니다.
  • 구현이 쉬운 반복문을 통해 우선 팩토리얼을 구현하고, 각각에 맞는 n, n-k, k를 집어 넣어서 팩토리얼 값을 구하게 하였습니다.
  • 그 후에, 나누기 및 곱하기를 진행하여 최종 결과를 출력하였습니다.
  • 아래는 해당 코드입니다.

🛠️ 구현 코드

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
#include <iostream>

using namespace std;

int n, k, result4;

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    cin >> n >> k;
    // 이항 계수 = n! / (n-k)!k!
    int result1 = 1;
    for (int i = n; i > 0; --i) {
        result1 *= i;
    }
    int result2 = 1;
    for (int i = n - k; i > 0; --i) {
        result2 *= i;
    }
    int result3 = 1;
    for (int i = k; i > 0; --i) {
        result3 *= i;
    }
    result4 = result1 / (result2 * result3);
    cout << result4 << "\n";
    return 0;
}

🧷 결론

  • 이번 문제는 이항 계수의 공식 및 팩토리얼 구현만 할줄 안다면 쉽게 구현 가능합니다.
  • 다만, 실수로 result 변수를 int result = 0; 식으로 초기화를 해버리면 팩토리얼 구조상 값들이 곱해져야 하는데, 0에 곱해지는 탓에 결과가 0으로 나올 수 있으니 주의가 필요합니다.
  • 또한, 팩토리얼을 반복문만으로가 아닌 팩토리얼 함수 등을 통해서 구하게 된다면 더 코드가 줄어들 수 있을 것 같습니다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.

인기 태그