알고리즘/브루트포스

자바 | 백준 | 1759 | 암호 만들기

cha-n 2021. 2. 28. 12:27

 

Solution

조합 - C개 중 L개를 뽑아 자음 2개 이상, 모음 1개 이상이면 출력한다.

증가하는 순서로 배열되어 있으므로 sort 필요하다.

// 1759, 암호 만들기
package BOJ;

import java.io.*;
import java.util.*;

public class BOJ_1759 {

	static int L, C;
	static String[] alphas;
	static int[] combs;
	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());

		L = Integer.parseInt(st.nextToken());
		C = Integer.parseInt(st.nextToken());

		alphas = br.readLine().split(" ");
		// 입력 끝
        
		// 증가하는 순서로 정렬
		Arrays.sort(alphas);

		combs = new int[L];

		comb(0, 0);
		System.out.println(sb);
	}

	static void comb(int cnt, int start) {
		if (cnt == L) {
			if (isPW(combs)) {
				for (int i = 0; i < combs.length; i++) {
					sb.append(alphas[combs[i]]);
				}
				sb.append("\n");
			}
			return;
		}

		for (int i = start; i < C; i++) {
			combs[cnt] = i;
			comb(cnt + 1, i + 1);
		}
	}

	static boolean isPW(int[] comb) {
		int v = 0, c = 0;
		for (int i = 0; i < comb.length; i++) {
			if (alphas[comb[i]].equals("a") || alphas[comb[i]].equals("e") || alphas[comb[i]].equals("i")
					|| alphas[comb[i]].equals("o") || alphas[comb[i]].equals("u")) {
				v++;
			} else {
				c++;
			}
			if (v > 1 && c > 2)
				return true;
		}

		if (v < 1 || c < 2)
			return false;
		return true;
	}
}

 

문제 www.acmicpc.net/problem/1759

 

1759번: 암호 만들기

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

www.acmicpc.net