[BOJ] 1759.암호만들기 (Java)
by 뚜부니
이 문제는 주어진 C개의 문자를 L 길이의 암호로 만드는 문제이며,
암호는 최소 한 개의 모음과 최소 두 개의 자음을 포함한 정렬된 형태로 만들어야 합니다.
브루트포스를 이용해서 풀면 되는 문제라 편안한 마음으로 풀었네요 😎😎
import java.io.*;
import java.util.Arrays;
import java.util.StringTokenizer;
class Main {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static int L;
static int C;
static char[] alpha;
static boolean[] visited;
static void printPassowrd() throws Exception {
String answer = "";
for (int i = 0; i < C; i++)
if (visited[i])
answer += alpha[i];
System.out.println(answer);
}
/** checkVowel
*
* @param alpha 확인하려는 문자
* @return 모음인지 확인 결과 반환
*/
static boolean checkVowel(char alpha) {
if (alpha == 'a' || alpha == 'e' || alpha == 'i' || alpha == 'o' || alpha == 'u')
return true;
else
return false;
}
/** createPassword
*
* @param len 암호 길이
* @param idx for문 시작할 idx 번호
* @param vowel 모음 수
* @param consonants 자음 수
*/
static void createPassword(int len, int idx, int vowel, int consonants) throws Exception {
// 조건 만족 시 출력
if (len == L) {
if (vowel < 1 || consonants < 2) // 조건에 해당하지 않은 경우 반환
return;
printPassowrd();
return;
}
for (int i = idx; i < C; i++) {
if (!visited[i]) {
visited[i] = true; // 방문한 알파벳 번호
if (checkVowel(alpha[i]))
createPassword(len + 1, i + 1, vowel + 1, consonants);
else
createPassword(len + 1, i + 1, vowel, consonants + 1);
visited[i] = false; // 방문 표시 제거
}
}
}
public static void main(String[] args) throws Exception {
StringTokenizer st = new StringTokenizer(br.readLine());
L = Integer.parseInt(st.nextToken());
C = Integer.parseInt(st.nextToken());
alpha = new char[C]; // 입력 받은 문자 저장
visited = new boolean[C]; // 방문 여부 표시
st = new StringTokenizer(br.readLine());
for (int i = 0; i < C; i++)
alpha[i] = st.nextToken().charAt(0); // 한글자씩 받아와서 char로 변경
Arrays.sort(alpha); // 사전순으로 만들기 위해 sort 시킴
createPassword(0, 0, 0, 0);
br.close();
}
}
'Algorithm > BOJ' 카테고리의 다른 글
[BOJ] 2016.미팅주선하기 (0) | 2022.06.13 |
---|---|
[BOJ] 2615.오목 (Java) (0) | 2022.04.21 |
[BOJ] 12094.A와 B (Java) (0) | 2021.06.10 |
[BOJ] 10159.저울 (Java) (0) | 2021.05.02 |
[BOJ] 1043.거짓말 (Java) (0) | 2021.04.30 |
블로그의 정보
개발하는 두부
뚜부니