링크 : https://www.acmicpc.net/problem/15664
정답 코드
#include<cstdio>
#include<algorithm>
int N, M,num[10000+1];
int pNum[10000 + 1];
bool visit[10000 + 1];
void dfs(int cnt) { //cnt는 0~M-1까지. M개의 배열을 출력하기 위함
if (cnt == M) {
for (int i = 0; i < M; i++) {
printf("%d ", pNum[i]);
}
printf("\n");
return;
}
int beforeN = 0; //중복 방지용. 이전의 값 저장하기 위한 변수
for (int i = 0; i < N; i++) {
if (visit[i]==false&&beforeN!=num[i]&&pNum[cnt-1]<=num[i]) { // 방문기록 && 중복 방지 && 오름차순
visit[i] = true;
pNum[cnt] = num[i];
beforeN = num[i];
dfs(cnt + 1);
visit[i] = false;
}
}
}
int main() {
scanf("%d %d", &N, &M);
for (int i = 0; i < N; i++) {
scanf("%d", &num[i]);
}
std::sort(num, num + N);
dfs(0);
return 0;
}