티스토리 뷰

알고리즘/백준

백준 1759 (암호 만들기) java

김다미김태리신시아 2022. 12. 30. 23:16

 

https://www.acmicpc.net/problem/1759

 

1759번: 암호 만들기

첫째 줄에 두 정수 L, C가 주어진다. (3 ≤ L ≤ C ≤ 15) 다음 줄에는 C개의 문자들이 공백으로 구분되어 주어진다. 주어지는 문자들은 알파벳 소문자이며, 중복되는 것은 없다.

www.acmicpc.net

import java.io.*;
import java.util.*;
/*
 * 백준 1759 암호 만들기
 * L 개의 알파벳 소문자
 * 최소 한개의 모음 , 두개 이상의 자음
 * 암호는 오름차순 형태
 * 암호에 들어가는 소문자 알파벳에는 중복이 불가능
 */
public class Main {
    static int l = 0;
    static int c = 0;
    static char[] arr = new char[16];
    static char[] result = new char[16];
    static boolean[] visit = new boolean[16];
    static char[] moum = {'a','e','i','o','u'};

    static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
    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());
        c = Integer.parseInt(st.nextToken());

        st = new StringTokenizer(br.readLine()," ");
        for(int i=0;i<c;i++)
        {
            arr[i] = st.nextToken().charAt(0);
        }
        Arrays.sort(arr,0,c);
        travel(0,0,0);

        bw.flush();
        bw.close();
        br.close();
    }

    static void travel(int k,int m, int g) throws IOException
    {
        if(k==l&&m>=1&&g>=2)
        {
            for(int i=1;i<=l;i++)
            {
                bw.write(result[i]);
            }bw.write("\n");
            return;
        }

        for(int i=0;i<c;i++)
        {
            if(!visit[i]&&result[k]<arr[i])
            {
                result[k+1] = arr[i];
                visit[i]= true;
                if(isMoum(arr[i])) {
                    travel(k + 1,m+1,g);
                }
                else{
                    travel(k+1,m,g+1);
                }
                visit[i] = false;
            }
        }

    }
    static boolean isMoum(char c)
    {
        for(int i=0;i<5;i++)
        {
            if(c==moum[i])
                return true;
        }
        return false;
    }
}

 

'알고리즘 > 백준' 카테고리의 다른 글

백준 2580 (스도쿠) java  (0) 2023.01.01
백준 1987 (알파벳) java  (0) 2022.12.30
백준 15686 (치킨 배달) java  (0) 2022.12.30
백준 19238 (스타트 택시) java  (0) 2022.12.30
백준 2589 (보물섬) - java  (0) 2022.12.27