[백준] 1759. 암호 만들기(골드5)

ERror.ASER·2021년 3월 16일
0

백준

목록 보기
36/69
post-thumbnail

백준(골드5) - 1759. 암호 만들기(골드5)


생각없이 그냥 본다면 순열이라고 착각할 수 있는 문제라고 생각했다.
하지만 암호를 이루는 알파벳이 암호에서 증가하는 순서로 배열되었을 것이라는 말에서 순열이 아니라 조합으로 풀어야 한다는 것을 알 수 있다.
친절하게 abc는 가능성이 있는 암호이지만 bac는 그렇지 않다고도 나와있다.


풀이

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

public class Main {
	static int l,c;
	static char[] numbers,results;
	public static void main(String[] args) throws Exception{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		l = Integer.parseInt(st.nextToken());//4
		c = Integer.parseInt(st.nextToken());//6
		numbers = new char[c];
		results = new char[l];
		
		st = new StringTokenizer(br.readLine());
		for(int i=0; i<c; i++) {
			numbers[i] = st.nextToken().charAt(0);
		}
		
		Arrays.sort(numbers);
		
		combination(0,0);
		
	}
	private static void combination(int cnt, int start) {
		if(cnt == l) {
			int vowels = 0;
			int consonants = 0;
			StringBuilder sb = new StringBuilder();
			
			for(int i=0; i<l; i++) {
				if(results[i] == 'a' || results[i] == 'e'|| results[i] == 'i'|| results[i] == 'o'|| results[i] == 'u') {
					vowels++;
				}else {
					consonants++;
				}
			}
			
			if(vowels>0 && consonants>1) {
				for(int i=0; i<l; i++) {
					sb.append(results[i]);
				}
				System.out.println(sb);
			}
			return;
		}
		
		for(int i= start; i<c; i++) {
			results[cnt] = numbers[i];
			combination(cnt+1,i+1);
		}
	}
}
profile
지우의 블로그

0개의 댓글