console.log

[BOJ] 1759 암호 만들기 JAVA 본문

알고리즘/백준

[BOJ] 1759 암호 만들기 JAVA

foresight 2023. 9. 24. 16:02

https://www.acmicpc.net/problem/1759

 

1759번: 암호 만들기

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

www.acmicpc.net

 

메모리 : 11608 kb

실행시간 : 84 ms

 

문제분석

알파벳을 사전 순으로 정렬한 뒤
조합을 통해 문자열을 뽑아낸다 !

결과를 사전 순으로 출력해야 하기 때문에 정렬한 뒤 문제풀기 !

 

걸린시간

40분 ⏱️

 

풀이방법

1. 배열에 받아서 정렬
2. 조합으로 L개 뽑기
3. 뽑은 암호에 대해 모음 1개 이상, 자음 2개 이상인 지 체크
4. 통과된 암호만 순서대로 sb에 저장 후 한 번에 출력

 

포인트

정렬을 먼저 한 뒤 조합 사용

 

코드

package study.day0811;

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

public class BOJ_1759_암호만들기 {
	static StringBuilder sb;
	static int L;
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		sb = new StringBuilder();
		StringTokenizer st = new StringTokenizer(br.readLine());
		L = Integer.parseInt(st.nextToken());
		int C = Integer.parseInt(st.nextToken());
		String[] arr = br.readLine().split(" ");	// 문자 입력받기
		String[] str = new String[L];	// L개 뽑아서 담아놓을 배열 생성
		Arrays.sort(arr);	// 입력받은 문자 사전 순으로 정렬

		comb(arr, str, 0, 0);	// 뽑기 시작 ~!

		System.out.println(sb);	// 뽑은 결과 저장해 둔 sb 출력
	}
	static void comb(String[] arr, String[] str, int r, int start) {	// 조합으로 C개 중에 L개 뽑기
		if(r == L) {	// 다 뽑았으면 모음 자음 개수 체크
			int vowel = 0;
			int consonant = 0;
			for (String s : str) {
				if(s.equals("a") | s.equals("e") | s.equals("i") |
						s.equals("o") | s.equals("u")) {
					vowel++;	// 모음 개수 세기
				}else consonant++;	// 자음 개수 세기
			}
			if(vowel >= 1 && consonant >= 2) {	// 모음 1개 이상이고, 자음 2개 이상일 때 암호 가능해짐
				for (String s : str) {
					sb.append(s);
				}
				sb.append("\n");
			}
			return;
		}
		if(start == arr.length) return;
		str[r] = arr[start];
		comb(arr, str, r + 1, start + 1);
		comb(arr, str, r, start + 1);
	}
}

'알고리즘 > 백준' 카테고리의 다른 글

[BOJ] 16637 괄호 추가하기 JAVA  (0) 2023.10.01
[BOJ] 14891 톱니바퀴 JAVA  (0) 2023.09.25
[BOJ] 12904 A와 B JAVA  (0) 2023.09.19
[BOJ] 1790 수 이어 쓰기 2 JAVA  (0) 2023.09.15
[BOJ] 2800 괄호 제거 JAVA  (0) 2023.08.31