백준 문제풀이/브론즈1

백준 11050번 - 이항계수 1

void_melody 2022. 1. 12. 21:58

 

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

 

11050번: 이항 계수 1

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

www.acmicpc.net

#include <iostream>

using namespace std;

int main()
{
	std::cin.tie(NULL);
	std::ios::sync_with_stdio(false);
	
	int N, K;
	cin >> N >> K;

	int temp = 1;
	int div = 1;
	for (int i = 1; i <= K; i++)
	{
		temp *= N;
		N--;
		div *= i;
	}
	cout << temp / div;
	
    return 0;
}

원래 조합이 n! / (n-r)! r! 이다.
근데 수능문제들을 좀 풀어봤다면 n! / (n-r)! 을 한 다음에, 1/r!을 곱하는 것이 조금 더 편하다.
n! / (n-r)!의 의미를 잘 생각해본다면, n부터 시작해서 r개 만큼 -- 하면서 곱하면 된다.
(해당 코드는 temp *= N; N--;에 해당)
r!은? 그냥 r!하면 되지.
시간을 위해서, 반복문 하나에 다 쑤셔넣으려고 노력해서 나온 결과다.