03 Jun 2023

[Java] 백준 1759번: 암호 만들기

1759

풀이 방법

주어진 문자들로 암호를 조합해서 만들어야 한다. 주의 사항으로는 중복되는 것은 없다고 하니, 조합 알고리즘을 사용해 모든 가능한 암호를 뽑아냈다.

그 다음, 자음의 수는 2개 이상이고 모음의 수는 1개 이상이기 때문에 switch문을 통해 개수를 세고, 조건에 맞는 암호만 StringBuilder에 담아 출력하면 된다.

풀이 코드

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

public class BOJ_1759_암호_만들기 {
	static List<String> strList;
	static StringBuilder sb;
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		sb = new StringBuilder();
		
		int L = Integer.parseInt(st.nextToken());
		int C = Integer.parseInt(st.nextToken());
		char[] alphabets = new char[C];
		
		st = new StringTokenizer(br.readLine());
		for(int i=0; i<C; i++) {
			alphabets[i] = st.nextToken().charAt(0);
		}
		
		Arrays.sort(alphabets);
		strList = new LinkedList<>();
		
		combination(0, 0, new char[L], alphabets);
		
		System.out.println(sb);
		
	}
	private static void combination(int cnt, int idx, char[] result, char[] alphabets) {
		if(cnt == result.length) {
			String str = "";
			int jaeum = 0, moeum = 0;
			
			for(int i=0; i<result.length; i++) {
				switch(result[i]) {
				case 'a':
				case 'e':
				case 'i':
				case 'o':
				case 'u':
					moeum++;
					break;
				default:
					jaeum++;
				}
				str += result[i];
			}

			if(jaeum >= 2 && moeum >= 1) {
				sb.append(str+"\n");				
			}
			return;
		}
		
		for(int i=idx; i<alphabets.length; i++) {
			result[cnt] = alphabets[i];
			combination(cnt+1, i+1, result, alphabets);
		}
	}

}
Thank You For Reading
SeungJun Jeon

점점 강해지고 있습니다.

comments powered by Disqus