```
백준 1759번 암호 만들기 JAVA 구현해보기
```

이번 글을 통해 배워갈 내용
- 백준 1759번 풀이
https://www.acmicpc.net/problem/1759
1759번: 암호 만들기
첫째 줄에 두 정수 L, C가 주어진다. (3 ≤ L ≤ C ≤ 15) 다음 줄에는 C개의 문자들이 공백으로 구분되어 주어진다. 주어지는 문자들은 알파벳 소문자이며, 중복되는 것은 없다.
www.acmicpc.net
백준 1759번 암호 만들기는
난이도 골드 등급의 문제로서
서로 다른 알파벳 소문자로 구성된 L
조합할 문자들의 길이 C가 주어질 때
조합될 문자가
모음 aeiou 중에 최소 한 개를 가지고
자음은 최소 두 개 가지며
알파벳이 사전 순으로 증가형이며
중복되는 알파벳이 없을 때
조합 가능한 문자열을 전부 출력해주면 되는 문제입니다.
30분 정도 위에 링크를 방문하셔서 풀어보시고
안 풀리시는 경우에만 아래 해답을 봐주시면 감사하겠습니다.
입력받고
사전 순으로 정렬한 다음
재귀적으로 돌면서
이전에 추가한 단어가 아니고
이전 단어보다 사전순으로 크거나
길이가 0일 경우
재귀적으로 단어를 찾아주고
단어의 길이가 결괏값에서 요구하는 단어 길이면 멈추고
조건인 자음이 최소 두 개 모음이 최소 한 개 이상일 때 출력해줍니다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.StringTokenizer;
import java.util.stream.Collectors;
public class Main {
static int outputLetterSize;
static int inputLetterSize;
static List<String> inputLetters = new ArrayList<>();
public static void main(String[] args) throws IOException {
final BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
outputLetterSize = Integer.parseInt(st.nextToken());
inputLetterSize = Integer.parseInt(st.nextToken());
// 가능한 단어리스트
st = new StringTokenizer(br.readLine(), " ");
for (int i = 0; i < inputLetterSize; i++) {
inputLetters.add(st.nextToken());
}
// 사전순 정렬
inputLetters = inputLetters.stream().sorted(Comparator.naturalOrder()).collect(Collectors.toList());
// 단어 조합 찾기
findOutputLetters("");
}
private static void findOutputLetters(String word) {
if (word.length() == outputLetterSize) {
if (isValid(word)) {
System.out.println(word);
}
return;
}
for (int i = 0; i < inputLetterSize; i++) {
String letter = inputLetters.get(i);
if (!word.contains(letter) &&
(word.length() == 0 || word.charAt(word.length() - 1) < letter.charAt(0))) {
findOutputLetters(word + letter);
}
}
}
private static boolean isValid(String word) {
boolean isValid = false;
int consonantCount = 0;
int vowelCount = 0;
char[] charArray = word.toCharArray();
for (char ch : charArray) {
if (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u') {
vowelCount++;
} else {
consonantCount++;
}
if (vowelCount >= 1 && consonantCount >= 2) {
isValid = true;
break;
}
}
return isValid;
}
}
읽어주셔서 감사합니다
무엇인가 얻어가셨기를 바라며
오늘도 즐거운 코딩 하시길 바랍니다 ~ :)
728x90
'Java > Java 알고리즘' 카테고리의 다른 글
| 백준 6812번 Good times JAVA 구현해보기 (0) | 2022.01.31 |
|---|---|
| 백준 6811번 Old Fishin’ Hole JAVA 구현해보기 (0) | 2022.01.31 |
| 백준 1837번 암호제작 JAVA 구현해보기 (0) | 2022.01.31 |
| 백준 12833번 "XORXORXOR" JAVA 구현해보기 (0) | 2022.01.29 |
| 백준 5026번 "박사과정" JAVA 구현해보기 (1) | 2022.01.29 |