[백준 BOJ] 11050번 이항 계수 1 (C++/cpp)

2022. 2. 12. 23:13PS (Program Solving)/BOJ (백준)

문제 설명

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

 

11050번: 이항 계수 1

첫째 줄에 \(N\)과 \(K\)가 주어진다. (1 ≤ \(N\) ≤ 10, 0 ≤ \(K\) ≤ \(N\))

www.acmicpc.net

백준 BOJ 11050번 이항 계수 1 문제 사진

 

접근 방법 - 재귀 알고리즘을 사용하는 수학 문제

백준의 11050번 문제는 재귀 함수를 사용하여 해결해야 하는 수학 문제이다.

해당 문제는, 입력받은 두 숫자에 대한 이항 계수 연산의 결괏값을 출력해야 하는 문제이다.

여기서, 이항 계수의 연산은 아래처럼 수행된다.

이항 계수 연산식 사진

위를 보면 !(팩토리얼) 연산이 있는데, 바로 이 연산을 재귀 알고리즘으로 표현해야 한다.

보통 팩토리얼 연산을 위한 재귀 함수는 제어 변수인 n이 1일 때까지만 고려한다.

하지만 필자는 해당 문제 입력값의 범위를 참고하여, 0인 경우도 함께 고려하면서 함수를 구성하였다.

자세한 구현 방법은 아래를 참고하길 바란다.

필자는 아래의 순서대로 코드를 작성하여 문제를 해결하였다.

 

 코드의 실행 순서

1) 이항 계수 연산에 사용할 두 변수(n, k)를 입력받는다.

 

2) 위의 이항 계수 연산식대로 값을 구성한다.

(팩토리얼 연산 수행 : n에서부터 시작하여 1이 될 때까지 연달아 곱한다. 만일 어느 입력값이 0이라면 1을 반환한다.)

 

3) 2)의 결괏값을 출력한다.

반응형

 

성공한 코드

#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)
#include <iostream>
using namespace std;

//백준 11050번 코드
int fac(int n) {
	if (n == 0) {
		return 1;	// 입력값 0일 때도 고려하기
	}
	if (n == 1) {
		return 1;
	}
	else { return n * fac(n - 1); }
}

int main() {
	int n, k;
	cin >> n >> k;
	cout << fac(n) / (fac(k) * fac(n - k));
}

 

제출 결과

백준 BOJ 11050번 이항 계수 1 문제 C++ 제출 결과

(2022.01.03 백준 11050번 문제 제출 결과)

반응형