- 흔하디 흔한 DFS + 백트래킹 문제
- 걸리는 점은 자음 모음의 개수
- 암호의 길이가 L이 될 때, 자음 모음의 개수가 조건을 충족하면 값 출력
#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;
int L, C;
vector<char> v;
string curstr;
bool check(){
int moum = 0;
for(int i = 0; i < L; ++i){
if(curstr[i] == 'a' ||
curstr[i] == 'e' ||
curstr[i] == 'i' ||
curstr[i] == 'o' ||
curstr[i] == 'u')
moum++;
}
if(moum >= 1 && L - moum >= 2)
return true;
else
return false;
}
void DFS(int N){
if((int)curstr.size() == L){
if(check()){
for(int i = 0; i < L; ++i){
cout << curstr[i];
}
cout << '\n';
}
return;
}
for(int i = N; i < C; ++i){
curstr.push_back(v[i]);
DFS(i + 1);
curstr.pop_back();
}
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> L >> C;
for(int i = 0; i < C; ++i){
char tmp;
cin >> tmp;
v.push_back(tmp);
}
sort(v.begin(), v.end());
DFS(0);
}