본문 바로가기

알고리즘/ACM 문제 풀이

[백준] 11050번 - 이항 계수 1 ( C 문제 풀이 )


백준 11050번 문제 - 이항 계수 1


이항 계수

위키 백과 : 주어진 크기의 조합의 가짓수 입니다.  
수학 백과 : 이항 정리에서 전개된 항의 계수

공식


문제 풀이

공식만 잘 보면 너무나 쉽습니다. 물론 저렇게 공식을 풀어나가는 방법은 어렵습니다. (저도 오랜만에 봤기 때문에 이항계수 부터 찾아봤습니다.) 

문제는 푸는 방법의 핵심은 factorial입니다. 

factorial은 재귀적으로도 구현이 가능하고 반복문으로도 구현이 가능합니다. 

저는 반복문 코드로 구현하였습니다. ( 재귀문으로는 구글에서 찾아보시면 쉽게 코드를 구할 수 있습니다.)

Factorial 반복문 코드

1
2
3
4
5
6
7
int factorial(int num) {
    int result= 1;
    for (int i = 1; i <= num; i++) {
        result = result * i;
    }
    return result;
}
cs

코드에 대해 간단한 설명을 드리자면

5를 입력할 경우

i = 1 일 때 : 1 * 1

i = 2 일 때 : 1 * 2

i = 3 일 때 : 2 * 3

i = 4 일 때 : 6 * 4

i = 5 일 때 : 24 * 5

결과는 120

이렇게 1 * 2 * 3 * 4 * 5 를 곱한 값을 구하게 됩니다.  


전체 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <stdio.h>
 
int factorial(int num) {
    int result= 1;
    for (int i = 1; i <= num; i++) {
        result = result * i;
    }
    return result;
}
 
int main() {
    int N;
    int K;
    scanf("%d"&N);
    scanf("%d"&K);
 
    int A = factorial(N);
    int B = factorial(K);
    int C = factorial(N - K);
 
    int result = A / (B * C);
    printf("%d\n", result);
}
cs

코드 이해를 돕기 위해 A, B, C로 선언하여 코드를 구현 하였습니다. 

이해가 잘 안되면 한번 돌려보시면 좀 더 이해가 빠르게 됩니다.


출력


코드 제출 결과