https://www.acmicpc.net/problem/1759
1. 입력한 C글자를 오름차순으로 정렬
2. C에서 L을 선택합니다.
역추적에 의한 선택(조합론)출력 배열에 넣습니다.
3. 출력 배열에서 L이 포함된 문자를 확인합니다.
-> 자음이 2개 이상, 모음이 1개 이상인지 확인
-> 입력이 맞으면 오름차순으로 출력 후 종료
-> 조건이 만족되지 않으면 함수는 출력 없이 종료
#include <iostream>
#include <algorithm>
#define MAX_N 16
using namespace std;
char in(MAX_N), out(MAX_N);
int visited(MAX_N);
int L, C;
void solution(int depth, int start) {
int v = 0, c = 0;
if(depth == L) {
for(int i = 0; i < L; i++) {
if(out(i) == 'a' || out(i) == 'e' || out(i) == 'i' || out(i) == 'o' || out(i) == 'u') {
v++;
}
else c++;
if(v >= 1 && c >= 2) {
sort(out, out + L);
for(int i = 0; i < L; i++)
cout << out(i);
cout << "\n";
return;
}
else continue;
}
return ;
}
else {
for(int i = start; i < C; i++) {
if(!
visited(i)) {
visited(i) = true;
out(depth) = in(i);
solution(depth + 1, i + 1);
visited(i) = false;
}
}
}
}
int main() {
cin >> L >> C;
for(int i = 0; i < C; i++)
cin >> in(i);
sort(in, in + C);
solution(0, 0);
}