connecting the dots

[BOJ/Java] 1759 : 암호 만들기 본문

algorithm/BOJ

[BOJ/Java] 1759 : 암호 만들기

林 : 2021. 3. 17. 10:01

문제

 

www.acmicpc.net/problem/1759

 

1759번: 암호 만들기

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

www.acmicpc.net

 

풀이

 

  • 입력 가능한 문자들 중 L개를 고른다(조합)
  • 조합 중 모음이 한 개 이상 && 자음이 두 개 이상인 것만 자료구조에 넣는다
  • 해당 자료구조를 sort(알파벳 순으로 정렬)

 

 

코드

 

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

public class Main {
	static BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
	static StringTokenizer st;
	static int l, c;
	static String[] alphabet;
	static ArrayList<String> answer = new ArrayList<>();
	static String[] combArr;
	static StringBuilder sb;
	static int[] combIndex;

	public static void main(String[] args) throws Exception {
		st = new StringTokenizer(in.readLine());
		l = Integer.parseInt(st.nextToken());
		c = Integer.parseInt(st.nextToken());
		alphabet = in.readLine().split(" ");


		combArr = new String[l];
		combIndex = new int[l];
		combination(0, 0);

		Collections.sort(answer);
		for (String s : answer) {
			System.out.println(s);
		}
	}

	private static void combination(int cnt, int start) {

		if (cnt == l) {
			for (int i = 0; i < l; i++) {
				combArr[i] = alphabet[combIndex[i]];
			}
			int vCount = 0;// 모음
			int cCount = 0;// 자음
			for (int i = 0; i < l; i++) {
				if (combArr[i].equals("a") || combArr[i].equals("e") || combArr[i].equals("i") || combArr[i].equals("o")
						|| combArr[i].equals("u")) {
					vCount++;
				} else {
					cCount++;
				}
			}

			if (vCount >= 1 && cCount >= 2) {
				Arrays.sort(combArr);
				String str = "";
				for (String s : combArr) {
					str += s;
				}
				answer.add(str);
			}

			return;
		}
		
		for (int i = start; i < c; i++) {
			combArr[cnt] = Integer.toString(i);
			combIndex[cnt] = i;
			combination(cnt + 1, i + 1);

		}
	}

}

 

 

 

'algorithm > BOJ' 카테고리의 다른 글

[BOJ/Java] 17070 : 파이프 옮기기1  (0) 2021.03.17
[BOJ/Java] 2644 : 촌수계산  (0) 2021.03.17
[BOJ/Java] 14502 : 연구소  (0) 2021.03.16
[BOJ/Java] 16234 : 인구이동  (0) 2021.03.16
[BOJ/Java] 17140 : 이차원 배열과 연산  (0) 2021.03.16