본문 바로가기

알고리즘/써먹기 좋은 알고리즘

next_permutation을 이용한 조합의 개수 구하기

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
	vector<int> v;
	int n, k;
	cin >> n >> k;

	for (int i = 0; i < n; i++)
		v.push_back(i + 1);

	vector<int> ind; //0과 1을 저장할 배열 벡터 생성

	for (int i = 0; i < k; i++)
		ind.push_back(1); // k개의 1을 추가

	for (int i = 0; i < v.size() - k; i++)
		ind.push_back(0); // n-k개의 0을 추가

	sort(ind.begin(), ind.end());

	do
	{
		for (int i = 0; i < ind.size(); i++)
		{
			if (ind[i] == 1)
			{
				printf("%d ", v[i]);
			}
		}
		printf("\n");
	} while (next_permutation(ind.begin(), ind.end()));

	return 0;

}
1부터 N까지의 수 중 K개를 뽑아서 만들 수 있는 조합의 개수!