본문 바로가기

ALGORITHM

백준 1759 암호 만들기 (Java)

1. 문제 링크

 

1759번: 암호 만들기

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

www.acmicpc.net

 

2. 문제 및 입출력예제

 

3. 문제 풀이

조합을 이용해 가능한 모든 암호를 만든다.

출력 전에 조건문을 이용해 모음 하나, 모음 두 개 이상인지 확인해서 출력한다.

 

 

4. 코드

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

public class Main {
	static int L, C, numbers[], mo, ja;
	static String[] al;
	static StringBuilder sb;
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new java.io.InputStreamReader(System.in));
		sb = new StringBuilder();
		
		String[] lc = br.readLine().split(" ");
		L = Integer.parseInt(lc[0]); //사용할 알파벳 소문자
		C = Integer.parseInt(lc[1]); //사용할 문자의 종류
		String[] split = br.readLine().split(" ");
		numbers = new int[L];
		al = new String[C];
		for(int i=0; i<C;i++) {
			al[i] = split[i];
		}
		//(정렬)
		Arrays.sort(al); 
		
		com(0, 0);
		System.out.println(sb);
	}

	private static void com(int cnt, int start) {
		if(cnt == L) {
			make(numbers);
			return;			
		}
		for (int i = start; i < C; i++) {
			numbers[cnt] = i;
			com(cnt + 1, i + 1);
		}
	}

	private static void make(int[] numbers) {
		mo = 0;
		ja = 0;
		StringBuilder use = new StringBuilder();
		for(int i=0;i<numbers.length;i++) {
			String temp = al[numbers[i]];
			if(temp.equals("a")||temp.equals("e")||temp.equals("i")||temp.equals("o")||temp.equals("u")) {
				mo++;
			}
			else {
				ja++;
			}
			use.append(temp);
		}
		if(mo >= 1 && ja >= 2) {
			sb.append(use).append("\n");
		}
	}	
}

 

'ALGORITHM' 카테고리의 다른 글

백준 9375 패션왕 신해빈 (Java)  (0) 2023.03.30
백준 1920 수 찾기 (Java)  (0) 2023.03.29
백준 2567 색종이-2 (Java)  (0) 2023.03.27
백준 27160 할리갈리 (Java)  (0) 2023.03.26
백준 1717 집합의 표현 (Java)  (0) 2023.03.25