728x90
주어진 문자를 사전순으로 만들 수 있는 암호를 출력하는 문제입니다.
최소 모음 1글자에 자음2글자를 포함해야합니다.
DFS를 사용해서 가능한 암호를 전부 확인하고
모음 1글자와 자음 2글자를 포함하는지 확인해주었습니다.
확인이 완료된 암호를 출력해주었습니다.
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
static char[] vowels = {'a', 'e', 'i', 'o', 'u'};
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
String[] arr = new String[m];
st = new StringTokenizer(br.readLine());
for(int i=0; i<m; ++i) {
arr[i] = st.nextToken();
}
Arrays.sort(arr);
for(int i=0; i<m; ++i) {
String str = arr[i];
DFS(i+1, n, m, arr, str);
}
}
public static void DFS(int index, int n, int m, String[] arr, String str) {
if(str.length() == n) {
int vow = 0;
for(int i=0; i<str.length(); ++i) {
for(int j=0; j<5; ++j) {
if(str.charAt(i) == vowels[j]) {
++vow;
}
}
}
if(vow > 0 && vow < str.length() - 1) {
System.out.println(str);
}
return;
}
for(int i=index; i<m; ++i) {
DFS(i+1, n, m, arr, str + arr[i]);
}
}
}
'알고리즘' 카테고리의 다른 글
[Java] 백준 15593번 Lifeguards (Bronze) (0) | 2023.02.25 |
---|---|
[Java] 백준 17135번 캐슬 디펜스 (0) | 2023.02.24 |
[Java] 백준 2644번 촌수계산 (0) | 2023.02.23 |
[Java] 백준 1697번 숨바꼭질 (0) | 2023.02.23 |
[Java] 백준 2667번 단지번호붙이기 (0) | 2023.02.23 |