https://www.acmicpc.net/problem/1759
완전탐색 (부르트포스) 알고리즘과 DFS..
일단 문자열들을 싹 다 만들고, 나중에 조건을 판별해줬다.
아무래도 완전탐색이 어렵다 나는 ... ㅠㅠ
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int L, C;
vector<char> vec;
vector<char> result;
bool Check()
{
int moeum = 0;
for (auto& r : result) {
if (r == 'a' || r == 'e' || r == 'i' || r == 'o' || r == 'u')
moeum++;
}
if (moeum >= 1 && L - moeum >= 2) return true;
return false;
}
void DFS(int cur)
{
if (result.size() == L) {
if (Check()) {
for (auto& r : result)
cout << r;
cout << '\n';
}
return;
}
for (int i = cur; i < C; i++) {
result.push_back(vec[i]);
DFS(i+1);
result.pop_back();
}
}
int main()
{
cin.tie(0);
cout.tie(0);
ios::sync_with_stdio(0);
cin >> L >> C;
char c;
for (int i = 0; i < C; i++) {
cin >> c;
vec.push_back(c);
}
sort(vec.begin(), vec.end());
DFS(0);
}