Deff_Dev

[백준] 15954번 N과 M (5) (C++) 본문

코딩테스트/백준

[백준] 15954번 N과 M (5) (C++)

Deff_a 2024. 8. 30. 16:40

문제

 

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


풀이

next_permutation() 을 이용하여 조합을 구하고 해당 조합에서 순열을 구한 값들을 저장하고 오름차순으로 정렬한 후, 출력하는 방법으로 풀이했다.

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

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

using namespace std;

int main() {
	int n, m, sel;

	cin >> n >> m;

	vector <int> vec (n);
	vector <bool> combination (n, true);
	vector<vector<int>> answer;

	for (int i = 0; i < n; i++) {
		cin >> vec[i];
	}
	for (int i = 0; i < n - m; i++) {
		combination[i] = false;
	}

	do {
		vector <int> combinationValues;
		for (int i = 0; i < n; i++) {
			if (combination[i]) {
				combinationValues.push_back(vec[i]);
			}
		}

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

		do {
			vector <int> result (m);
			for (int i = 0; i < m; i++) {
				result[i] = combinationValues[i];
			}
			answer.push_back(result);
		} while (next_permutation(combinationValues.begin(), combinationValues.end()));

	} while (next_permutation(combination.begin(), combination.end()));

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

	for (int i = 0; i < answer.size(); i++) {
		for (int j = 0; j < m; j++) {
			cout << answer[i][j] << " ";
		}
		cout << "\n";
	}
	return 0;
}