- 코드
정답 코드 : 처음 사전순으로 정렬 한다음 String에 추가 or 추가하지 않으면서 메소드를 계속 돌림 길이가 L이되면 basecase로 모음 1개이상 자음 2개이상이 되면 출력.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;
public class Main {
static char[] array;
static int L, C;
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());
array = new char[C];
st = new StringTokenizer(br.readLine());
for(int i = 0; i < C; i++) {
array[i] = st.nextToken().charAt(0);
}
Arrays.sort(array); // 핵심 (사전순으로 알파벳이 증가해야되는데 정렬해줌으로 써 알파벳 순으로만 들어가게함)
IncreasedString("", 0);
}
private static void IncreasedString(String s, int index) {
if(s.length() == L){ // 길이가 L개 이고
if(isPossible(s)){ // 모음하나이상, 자음 2개이상 맞으면
System.out.println(s); // 출력
}
return;
}
if(index >= C ){ // index 값이 맨끝에 왔으면 종료
return;
}
IncreasedString(s + array[index], index + 1);// 자기자신과 다음 문자까지 같이
IncreasedString(s, index+ 1);// 자기자신만
}
// 자음 2개이상, 모음 1개 이상인지
private static boolean isPossible(String s){
int vowel = 0, consonant = 0;
for (int i = 0; i < s.length(); i++) {
if(isCollection(s.charAt(i))){
vowel++;
}else {
consonant++;
}
}
return vowel>=1 && consonant >=2;
}
// 모음인지
private static boolean isCollection(char c) {
if(c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u')
return true;
return false;
}
}
'algorithm' 카테고리의 다른 글
[JAVA] 백준 5639번 : 이진 검색 트리 (0) | 2020.10.21 |
---|---|
[JAVA] 백준 2437번 : 저울 (0) | 2020.10.16 |
[JAVA] 백준 16916번 : 부분 문자열 (0) | 2020.10.13 |
[JAVA] 백준 16172번 : 나는 친구가 적다 (Large) (0) | 2020.10.13 |
[JAVA] 백준 1701번 : Cubeditor (0) | 2020.10.12 |