Algorithm/백준
[백준] 6603번: 로또
youngine
2021. 1. 27. 17:02
6603번: 로또
입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있다. 첫 번째 수는 k (6 < k < 13)이고, 다음 k개 수는 집합 S에 포함되는 수이다. S의 원소는 오름차순으로
www.acmicpc.net
dfs로 모든 순열을 출력할수 있도록 해주는 대신 사전순으로 출력이 되어야하기 떄문에 순열배열 arr에
arr.back()<num[i]로 항상 오름차순이 될 수있도록 했다.
#include<iostream>
#include<vector>
#include<cstring>
#include<algorithm>
#define MAX 50
using namespace std;
vector<int>num;
void dfs(int size, int now, vector<int>arr,vector<int>visit) {
if (size < now) {
for (int i = 0;i < size;i++) {
cout << arr[i] << ' ';
}
cout << '\n';
return;
}
for (int i = 0;i < num.size();i++) {
if (!visit[i]) {
if (arr.size()==0||arr.back() < num[i]) {
visit[i] = true;
arr.push_back(num[i]);
dfs(size, now + 1, arr, visit);
visit[i] = false;
arr.pop_back();
}
}
}
}
int main() {
while (1) {
int n;
cin >> n;
if (n == 0) break;
for (int i = 0,t=0;i < n;i++) {
cin >> t;
num.push_back(t);
}
sort(num.begin(), num.end());
dfs(6, 1, vector<int>(), vector<int>(MAX,0));
num.clear();
cout << '\n';
}
}