이번 문제는 처음 봤을 때는 쉽게 해결할 수 있을 것 같았지만 중복을 피해야 한다는 제약 때문에 조금 까다로웠던 문제였다.
#include <iostream>
#include <algorithm>
#define MAX 8
using namespace std;
int n, m;
int arr[MAX], result[MAX];
bool chk[MAX];
void Input(){
cin >> n >> m;
for (int i = 0; i < n; i++){
cin >> arr[i];
chk[i]=false;
}
sort(arr, arr + n);
}
void DFS(int cnt) {
if (cnt==m) {
for (int i=0; i<m; i++)
cout<<result[i]<<" ";
cout<<endl;
return;
}
int xdx = 0;
for (int i=0; i<n; i++) {
if (!chk[i]&&arr[i]!=xdx) {
result[cnt]=arr[i];
xdx=result[cnt];
chk[i]=true;
DFS(cnt+1);
chk[i]=false;
}
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
Input();
DFS(0);
return 0;
}