728x90
문제
https://www.acmicpc.net/problem/1759
해설
모든 가지수를 정렬된 순으로 확인해야하는 문제이므로 브루트포스를 조합을 사용해 해결한다.
조건들이 간단한 조합문제보다 더 다양함으로 이에 주의한다.
조건
- 최소 하나의 모음과 두개의 자음으로 구성
- 알파벳들은 정렬되어있음
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main{
// 12584 112
static StringBuilder sb = new StringBuilder();
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int L = Integer.parseInt(st.nextToken());
int C = Integer.parseInt(st.nextToken());
st = new StringTokenizer(br.readLine());
char [] inputs = new char[C];
for(int i=0;i<C;i++) {
inputs[i] = st.nextToken().charAt(0);
}
Arrays.sort(inputs);
// System.out.println(Arrays.toString(inputs));
com(L, C, inputs, 0, 0, new char[L]);
System.out.println(sb);
}
static void com(int L, int C, char[] inputs, int start, int cnt, char[] tmp) {
if(cnt == L) {
int vowel = 0;
int consonant = 0;
for(char word : tmp) {
if(word == 'a' || word == 'i' || word == 'o' || word == 'u' || word == 'e' ) {
vowel++;
}else {
consonant++;
}
}
if(vowel>0 && consonant>1) {
for(char word:tmp) {
sb.append(word);
}
sb.append("\n");
}
return;
}
for(int i=start; i<C;i++) {
tmp[cnt] = inputs[i];
// System.out.println(Arrays.toString(tmp));
com(L, C, inputs, i+1, cnt+1,tmp);
}
}
}
728x90
'[IT] 코딩테스트 > [문제 및 풀이] 백준' 카테고리의 다른 글
[백준] 2565 전깃줄 / 자바(Java) (0) | 2023.11.22 |
---|---|
[백준] 2467 용액 / 자바(Java) (1) | 2023.11.21 |
[백준] 2170 선 긋기 / 자바(Java) (0) | 2023.11.17 |
[백준] 1074 Z / 자바(Java) (0) | 2023.11.11 |
[백준] 1309 동물원 / 자바(Java) (0) | 2023.11.10 |