본문 바로가기
알고리즘/조합, 순열

백준 15657번 : N과 M (8)

by Jason95 2021. 1. 29.

문제 링크 : www.acmicpc.net/problem/15657

내 풀이(2021.1.29.) :

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

vector<int> list;
int N, M;

void dfs(int start, int depth, vector<int>& v) {
	if (v.size() == M) {
		for (int i = 0; i < v.size(); i++) {
			cout << v[i] << " ";
		}
		cout << endl;
		return;
	}
	for (int i = start; i < N; i++) {
		v.push_back(list[i]);
		dfs(i, depth + 1, v);
		v.pop_back();
	}
}

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	cin >> N >> M;
	for (int i = 0; i < N; i++) {
		int temp; cin >> temp; list.push_back(temp);
	}
	sort(list.begin(), list.end());
	vector<int> v;
	dfs(0, 0, v);

	return 0;
}

 

요구사항 : 서로 다른 N개의 수가 주어졌을 때, 수를 M번 선택해서 만들 수 있는 모든 순열 (같은 수 중복 선택 가능)