자바 백준 1759번
골드 5
https://www.acmicpc.net/problem/1759
문제 보기

분류: 수학, 브루트포스 알고리즘, 조합론, 백트래킹
코드 풀이
import java.util.Scanner; import java.util.Arrays; public class Main { static int L, C; // L: 암호의 길이, C: 주어진 문자 수 static char[] characters; // 주어진 문자를 저장할 배열 static StringBuilder result = new StringBuilder(); // 결과를 저장할 StringBuilder public static void main(String[] args) { Scanner sc = new Scanner(System.in); L = sc.nextInt(); // 암호의 길이 L을 입력 받음 C = sc.nextInt(); // 주어진 문자 수 C를 입력 받음 characters = new char[C]; // C개의 문자를 저장할 배열 초기화 for (int i = 0; i < C; i++) { // C개의 문자를 입력 받음 characters[i] = sc.next().charAt(0); // 각 문자를 배열에 저장 } Arrays.sort(characters); // 입력된 문자를 사전식으로 정렬 generatePassword(0, 0, "", 0, 0); // 암호 생성 메서드 호출 System.out.print(result.toString()); // 생성된 암호를 출력 } // 재귀적으로 가능한 암호를 생성하는 메서드 static void generatePassword(int index, int length, String current, int vowelCount, int consonantCount) { if (length == L) { // 현재 길이가 L에 도달한 경우 if (vowelCount >= 1 && consonantCount >= 2) { // 최소 한 개의 모음과 두 개의 자음이 포함된 경우 result.append(current).append("\n"); // 결과에 현재 조합을 추가 } return; // 함수 종료 } // 가능한 문자 조합 생성 for (int i = index; i < C; i++) { // 현재 인덱스부터 C까지 반복 char ch = characters[i]; // 현재 문자를 선택 if (isVowel(ch)) { // 현재 문자가 모음인지 확인 // 모음인 경우, 모음 카운트를 증가시켜 재귀 호출 generatePassword(i + 1, length + 1, current + ch, vowelCount + 1, consonantCount); } else { // 자음인 경우, 자음 카운트를 증가시켜 재귀 호출 generatePassword(i + 1, length + 1, current + ch, vowelCount, consonantCount + 1); } } } // 주어진 문자가 모음인지 확인하는 함수 static boolean isVowel(char ch) { // 모음의 경우 true, 그렇지 않으면 false 반환 return ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u'; } }
'공부하기 > 백준' 카테고리의 다른 글
[Java] 백준 풀기 10039 - 평균 점수 (0) | 2024.08.18 |
---|---|
[Java] 백준 풀기 9375 - 패션왕 신해빈 (0) | 2024.08.11 |
[Java] 백준 풀기 9020 - 골드바흐의 추측 (0) | 2024.07.28 |
[Java] 백준 풀기 1010 - 다리 놓기 (0) | 2024.07.25 |
[Java] 백준 풀기 2920 - 음계 (0) | 2024.07.16 |