백준(골드5) - 1759. 암호 만들기(골드5)
생각없이 그냥 본다면 순열이라고 착각할 수 있는 문제라고 생각했다.
하지만 암호를 이루는 알파벳이 암호에서 증가하는 순서로 배열되었을 것이라는 말에서 순열이 아니라 조합으로 풀어야 한다는 것을 알 수 있다.
친절하게 abc는 가능성이 있는 암호이지만 bac는 그렇지 않다고도 나와있다.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
static int l,c;
static char[] numbers,results;
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
l = Integer.parseInt(st.nextToken());//4
c = Integer.parseInt(st.nextToken());//6
numbers = new char[c];
results = new char[l];
st = new StringTokenizer(br.readLine());
for(int i=0; i<c; i++) {
numbers[i] = st.nextToken().charAt(0);
}
Arrays.sort(numbers);
combination(0,0);
}
private static void combination(int cnt, int start) {
if(cnt == l) {
int vowels = 0;
int consonants = 0;
StringBuilder sb = new StringBuilder();
for(int i=0; i<l; i++) {
if(results[i] == 'a' || results[i] == 'e'|| results[i] == 'i'|| results[i] == 'o'|| results[i] == 'u') {
vowels++;
}else {
consonants++;
}
}
if(vowels>0 && consonants>1) {
for(int i=0; i<l; i++) {
sb.append(results[i]);
}
System.out.println(sb);
}
return;
}
for(int i= start; i<c; i++) {
results[cnt] = numbers[i];
combination(cnt+1,i+1);
}
}
}