코딩테스트/백준
[백준] 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;
}