ALGORITHM
백준 1759 암호 만들기 (Java)
공부하는_다온
2023. 3. 28. 22:00
1. 문제 링크
1759번: 암호 만들기
첫째 줄에 두 정수 L, C가 주어진다. (3 ≤ L ≤ C ≤ 15) 다음 줄에는 C개의 문자들이 공백으로 구분되어 주어진다. 주어지는 문자들은 알파벳 소문자이며, 중복되는 것은 없다.
www.acmicpc.net
2. 문제 및 입출력예제
3. 문제 풀이
조합을 이용해 가능한 모든 암호를 만든다.
출력 전에 조건문을 이용해 모음 하나, 모음 두 개 이상인지 확인해서 출력한다.
4. 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.util.Arrays;
public class Main {
static int L, C, numbers[], mo, ja;
static String[] al;
static StringBuilder sb;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new java.io.InputStreamReader(System.in));
sb = new StringBuilder();
String[] lc = br.readLine().split(" ");
L = Integer.parseInt(lc[0]); //사용할 알파벳 소문자
C = Integer.parseInt(lc[1]); //사용할 문자의 종류
String[] split = br.readLine().split(" ");
numbers = new int[L];
al = new String[C];
for(int i=0; i<C;i++) {
al[i] = split[i];
}
//(정렬)
Arrays.sort(al);
com(0, 0);
System.out.println(sb);
}
private static void com(int cnt, int start) {
if(cnt == L) {
make(numbers);
return;
}
for (int i = start; i < C; i++) {
numbers[cnt] = i;
com(cnt + 1, i + 1);
}
}
private static void make(int[] numbers) {
mo = 0;
ja = 0;
StringBuilder use = new StringBuilder();
for(int i=0;i<numbers.length;i++) {
String temp = al[numbers[i]];
if(temp.equals("a")||temp.equals("e")||temp.equals("i")||temp.equals("o")||temp.equals("u")) {
mo++;
}
else {
ja++;
}
use.append(temp);
}
if(mo >= 1 && ja >= 2) {
sb.append(use).append("\n");
}
}
}