0920.2024.Today I Learned

Sungju Kim·2024년 9월 22일

Sparta_Coding_Camp_TIL

목록 보기
37/53

import java.io.*;
import java.util.*;

public class Main {
    private static char[] alphabets;
    private static int L = 0;
    private static int C = 0;

    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()); // Password length
        C = Integer.parseInt(st.nextToken()); // Number of available characters
        alphabets = new char[C];
        
        st = new StringTokenizer(br.readLine());
        for (int i = 0; i < C; i++) {
            alphabets[i] = st.nextToken().charAt(0);
        }
        Arrays.sort(alphabets); // Sort characters to maintain lexicographical order

        // Begin password generation
        generatePassword(new StringBuilder(), 0, 0, 0, 0);
    }

    private static void generatePassword(StringBuilder password, int index, int length, int vowels, int consonants) {
        if (length == L) {
            // Ensure it contains at least one vowel and two consonants
            if (vowels >= 1 && consonants >= 2) {
                System.out.println(password.toString());
            }
            return;
        }
        
        for (int i = index; i < C; i++) {
            char ch = alphabets[i];
            password.append(ch);
            if (isVowel(ch)) {
                generatePassword(password, i + 1, length + 1, vowels + 1, consonants);
            } else {
                generatePassword(password, i + 1, length + 1, vowels, consonants + 1);
            }
            password.deleteCharAt(password.length() - 1); // Backtrack
        }
    }

    private static boolean isVowel(char ch) {
        return ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u';
    }
}
profile
Fully ✨committed✨ developer, always eager to learn!

0개의 댓글