처음에는 조합으로 구한 숫자들을 인덱스로 삼아 character 배열을 만들어보고, 모음이 1자 이상, 자음이 2자 이상 들어갔을 때는 StringBuilder에 append 해줘야 겠다는 생각을 했다.
다만 문제를 풀기 위한 방식이라기 보다는 내가 조합을 써보고 싶다는 생각이었기 때문에 문제를 풀기 위해서는 메소드 안에서 처리를 다 해주는게 맞다고 생각했다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
class Main {
static int l, c;
static StringBuilder sb = new StringBuilder();
static char[] chars, ans;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
l = Integer.parseInt(st.nextToken());
c = Integer.parseInt(st.nextToken());
ans = new char[l];
chars = br.readLine().replaceAll(" ", "").toCharArray();
Arrays.sort(chars);
func(0, 0, 0, 0);
System.out.println(sb);
}
static void func(int index, int count, int vowel, int consonant) {
if (count == l) {
if (vowel >= 1 && consonant >= 2) {
for (int i = 0; i < l; i++) {
sb.append(ans[i]);
}
sb.append('\n');
}
return;
}
for (int i = index; i < c; i++) {
ans[count] = chars[i];
if (chars[i] == 'a' || chars[i] == 'e' || chars[i] == 'i' || chars[i] == 'o'
|| chars[i] == 'u') {
func(i + 1, count + 1, vowel + 1, consonant);
} else {
func(i + 1, count + 1, vowel, consonant + 1);
}
}
}
}