https://www.acmicpc.net/problem/1759
1759번: 암호 만들기
첫째 줄에 두 정수 L, C가 주어진다. (3 ≤ L ≤ C ≤ 15) 다음 줄에는 C개의 문자들이 공백으로 구분되어 주어진다. 주어지는 문자들은 알파벳 소문자이며, 중복되는 것은 없다.
www.acmicpc.net
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main{
    static char[] arr, password;
    static int L, C;
    public static void dfs(int cnt, int start){
        if(cnt==L){ // 암호의 길이가 L이면
            int c=0, v=0;
            for(char x : password){
                if(x=='a' || x=='e' || x=='i' || x=='o' || x=='u') v++; // 모음이면
                else c++;
            }
            if (v >= 1 && c >= 2) {
                for(char x :password){
                    System.out.print(x);
                }
                System.out.println();
            }
            return;
        }
        for(int i=start; i<C; i++){
            password[cnt] = arr[i];
            dfs(cnt+1, i+1); // 암호를 이루는 알파벳이 증가하는 순서로 배열되야 하므로 -> 방문처리도 안해줘도 된다.
        }
    }
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;
        st = new StringTokenizer(br.readLine());
        L = Integer.parseInt(st.nextToken()); // 암호는 L개의 알파벳 소문자들로 구성
        C = Integer.parseInt(st.nextToken()); // C개의 문자들
        arr = new char[C];
        password = new char[L];
        st = new StringTokenizer(br.readLine());
        for(int i=0; i<C; i++){
            arr[i] = st.nextToken().charAt(0);
        }
        Arrays.sort(arr); // 알파벳이 증가하는 순서대로 정렬
        dfs(0, 0);
    }
}
반응형
    
    
    
  'ALGORITHM' 카테고리의 다른 글
| [JAVA] 백준 11723번- 집합(비트 마스크) (0) | 2022.12.15 | 
|---|---|
| [JAVA] 백준 2529번- 부등호 (0) | 2022.12.14 | 
| [JAVA] 백준 14889번- 스타트와 링크 (0) | 2022.12.12 | 
| [JAVA] 백준 14501번- 퇴사 (0) | 2022.12.12 | 
| [JAVA] 백준 2668번- 숫자고르기 (0) | 2022.12.01 |