본문 바로가기
코딩테스트 준비/백준

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

by 스테디코디스트 2023. 8. 31.
반응형

<문제 소개>


<소스 코드>

#include <iostream>
using namespace std;

int main()
{
	// 쓰레드 환경이 아닐때 버퍼를 분리하여 처리속도를 빠르게 해줌
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	int N, K;
	cin >> N >> K;

	int gap = min(N - K, K);

	int x = 1; // 분자
	int y = 1; // 분모

	for (int i = 1; i <= gap; i++)
	{
		x *= N - i + 1;
		y *= i;
	}

	cout << x / y;

	return 0;
}

<풀이과정>

1. N과 K를 입력받는다.

2. N-K와 K중 더 작은 값을 gap에 저장한다.

3. 분자를 나타낼 x와 분모를 나타낼 y를 각각 1로 초기화 시켜 선언한다.

4. 조합을 계산할 때, 분자는 n부터 gap의 갯수만큼 1씩 빼가며 곱해주고, 분모는 반대로 1부터 gap의 갯수만큼 1씩 증가시키면서 곱해주어 둘을 나누어 계산하는 방식을 사용하였다.

5. 1부터 gap까지 반복하며 x에는 N부터 1씩 감소시키며 곱해주었고, y는 1부터 1씩 증가시키며 곱해주었다.

6. 반복이 끝난 뒤 x/y의 값을 출력해주면 된다.


<코멘트>

다른 분들의 풀이를 보니 이항계수의 공식인 n! / ((n-k)!*k!)을 이용했는데 나는 조금 다른 방식으로 풀어보았다.

조합을 계산할때 흔히 쓰는 방식으로 풀어보았다!


<제출결과>