[백준] 1759번 암호 만들기 JAVA 풀이

권용환·2021년 9월 20일
0

백준

목록 보기
13/36
post-thumbnail

문제 바로가기

나의 풀이

처음에는 조합으로 구한 숫자들을 인덱스로 삼아 character 배열을 만들어보고, 모음이 1자 이상, 자음이 2자 이상 들어갔을 때는 StringBuilder에 append 해줘야 겠다는 생각을 했다.

다만 문제를 풀기 위한 방식이라기 보다는 내가 조합을 써보고 싶다는 생각이었기 때문에 문제를 풀기 위해서는 메소드 안에서 처리를 다 해주는게 맞다고 생각했다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

class Main {

    static int l, c;
    static StringBuilder sb = new StringBuilder();
    static char[] chars, ans;

    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());

        ans = new char[l];
        chars = br.readLine().replaceAll(" ", "").toCharArray();
        Arrays.sort(chars);

        func(0, 0, 0, 0);

        System.out.println(sb);
    }

    static void func(int index, int count, int vowel, int consonant) {
        if (count == l) {
            if (vowel >= 1 && consonant >= 2) {
                for (int i = 0; i < l; i++) {
                    sb.append(ans[i]);
                }
                sb.append('\n');
            }
            return;
        }
        for (int i = index; i < c; i++) {
            ans[count] = chars[i];
            if (chars[i] == 'a' || chars[i] == 'e' || chars[i] == 'i' || chars[i] == 'o'
                || chars[i] == 'u') {
                func(i + 1, count + 1, vowel + 1, consonant);
            } else {
                func(i + 1, count + 1, vowel, consonant + 1);
            }
        }
    }
}
profile
마구 낙서하는 블로그입니다

0개의 댓글