점점 강해지고 있습니다.
[Java] 백준 1759번: 암호 만들기
풀이 방법
주어진 문자들로 암호를 조합해서 만들어야 한다. 주의 사항으로는 중복되는 것은 없다고 하니, 조합 알고리즘을 사용해 모든 가능한 암호를 뽑아냈다.
그 다음, 자음의 수는 2개 이상이고 모음의 수는 1개 이상이기 때문에 switch문을 통해 개수를 세고, 조건에 맞는 암호만 StringBuilder에 담아 출력하면 된다.
풀이 코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.StringTokenizer;
public class BOJ_1759_암호_만들기 {
static List<String> strList;
static StringBuilder sb;
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
sb = new StringBuilder();
int L = Integer.parseInt(st.nextToken());
int C = Integer.parseInt(st.nextToken());
char[] alphabets = new char[C];
st = new StringTokenizer(br.readLine());
for(int i=0; i<C; i++) {
alphabets[i] = st.nextToken().charAt(0);
}
Arrays.sort(alphabets);
strList = new LinkedList<>();
combination(0, 0, new char[L], alphabets);
System.out.println(sb);
}
private static void combination(int cnt, int idx, char[] result, char[] alphabets) {
if(cnt == result.length) {
String str = "";
int jaeum = 0, moeum = 0;
for(int i=0; i<result.length; i++) {
switch(result[i]) {
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
moeum++;
break;
default:
jaeum++;
}
str += result[i];
}
if(jaeum >= 2 && moeum >= 1) {
sb.append(str+"\n");
}
return;
}
for(int i=idx; i<alphabets.length; i++) {
result[cnt] = alphabets[i];
combination(cnt+1, i+1, result, alphabets);
}
}
}
Thank You For Reading