
- Solved.ac 기준 : 실버 2
- 사용언어 C++
문제 해석 및 풀이
- 백트래킹 기법을 이용해 답을 출력
- 같은 수가 들어 있을 때 이 수들은 같은 수 이면서 같은 수가 아님
- visited를 사용해 해당 수를 사용했는지 여부 판별할 것
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void backtracking(vector<int>& arr, vector<int>& lst, int m, vector<vector<int>>& res, vector<bool>& visited) {
if (lst.size() == m) {
res.push_back(lst);
return;
}
for (int i = 0; i < arr.size(); i++) {
if (!visited[i]) {
visited[i] = true;
lst.push_back(arr[i]);
backtracking(arr, lst, m, res, visited);
lst.pop_back();
visited[i] = false;
}
}
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n, m;
cin >> n >> m;
vector<int> arr(n);
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
sort(arr.begin(), arr.end());
vector<int> lst;
vector<vector<int>> res;
vector<bool> visited(n, false);
backtracking(arr, lst, m, res, visited);
sort(res.begin(), res.end());
res.erase(unique(res.begin(), res.end()), res.end());
for (const auto& r : res) {
for (int num : r) {
cout << num << " ";
}
cout << "\n";
}
return 0;
}