문제 링크
풀이
순열 문제인데 백트래킹 대신 next_permutation
함수 연습할 겸 풀었다.
여느 순열 문제와 같이 풀면 되지만, 중복을 제거하기 위해 마지막으로 구한 순열과 현재 구한 순열이 같지 않으면 출력하도록 했다.
코드
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int arr[9];
int n, m;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n >> m;
for (int i = 0; i < n; i++)
{
cin >> arr[i];
}
sort(arr, arr + n);
vector<int> pre;
do
{
vector<int> cur;
for (int i = 0; i < m; i++)
{
cur.push_back(arr[i]);
}
if (pre != cur)
{
for (int i = 0; i < cur.size(); i++)
{
cout << cur[i] << ' ';
}
cout << '\n';
pre = cur;
}
} while (next_permutation(arr, arr + n));
}