백준 - 1759 : 암호 만들기 [자바]

HungAh.log·2021년 8월 23일
0
post-custom-banner
import java.util.*;
import java.io.*;

public class Main {
	// 암호 : 서로 다른 L개의 알파벳 소문자들
	// 최소 한 개의 모음과 최소 두 개의 자음으로 구성
	// 정렬된 문자열
	
	static char[] input;
	static StringBuilder sb = new StringBuilder();

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		int L = Integer.parseInt(st.nextToken()); // 암호 길이
		int C = Integer.parseInt(st.nextToken()); // 알파벳 개수

		char[] alp = new char[C];
		String str = br.readLine().replace(" ", "");
		for (int i = 0; i < C; i++) {
			alp[i] = str.charAt(i);
		}
		Arrays.sort(alp); // 출력 결과가 정렬되어있으므로
		input = new char[L];
		comb(L, alp, 0, 0, 0, 0);
		System.out.println(sb);
		br.close();
	}

	/**
	 * @param n  : 뽑을 원소 개수
	 * @param cc : 자음 개수
	 * @param cv : 모음 개수
	 */
	static void comb(int n, char[] ch, int cnt, int start, int cc, int cv) {
		if (cnt == n) { // n개 뽑으면
			if (cc >= 2 && cv >= 1) { // 자음 두 개 이상, 모음 한 개 이상이면
				sb.append(String.valueOf(input)).append("\n");
			}
			return;
		}
		for (int i = start; i < ch.length; i++) {
			input[cnt] = ch[i];
			if ("aeiou".contains(ch[i] + "")) { // 모음을 포함하고 있다면
				comb(n, ch, cnt + 1, i + 1, cc, cv + 1);
			} else {
				comb(n, ch, cnt + 1, i + 1, cc + 1, cv);
			}
		}
	}
}
profile
👩🏻‍💻
post-custom-banner

0개의 댓글