코드와이
[BAEKJOON] 1759. 암호 만들기 본문
백트래킹
문제링크
1759번: 암호 만들기
첫째 줄에 두 정수 L, C가 주어진다. (3 ≤ L ≤ C ≤ 15) 다음 줄에는 C개의 문자들이 공백으로 구분되어 주어진다. 주어지는 문자들은 알파벳 소문자이며, 중복되는 것은 없다.
www.acmicpc.net
package acmicpc.Gold5;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class 암호_만들기 {
static int n, m;
static char[] alph;
static StringBuilder sb;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
sb = new StringBuilder();
n = Integer.parseInt(st.nextToken());
m = Integer.parseInt(st.nextToken());
alph = new char[m];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < m ; i++) {
alph[i] = st.nextToken().charAt(0);
}
Arrays.sort(alph);
comb(0,0,"");
if(sb.length() > 0) sb.setLength(sb.length()-1);
System.out.println(sb);
}
public static void comb(int cnt, int idx, String str) {
if(cnt == n) {
if(checking(str)) sb.append(str).append("\n");
return;
}
for(int i = idx ; i < m ; i++) {
comb(cnt+1, i+1, str+alph[i]);
}
}
public static boolean checking(String str) {
char[] vowel = {'a','e','i','o','u'};
int v = 0; // 모음 갯수
int c = 0; // 자음 갯수
for(char s : str.toCharArray()) {
boolean flag = true;
for(char vo : vowel) {
if(vo == s) {
v++;
flag = false;
break;
}
}
if(flag)
c++;
}
return v >= 1 && c >=2 ? true : false;
}
}
'acmicpc' 카테고리의 다른 글
[BAEKJOON] 14888. 연산자 끼워넣기 (0) | 2021.04.04 |
---|---|
[BAEKJOON] 9663. N-Queen (0) | 2021.04.04 |
[BAEKJOON] 1932. 정수 삼각형 (0) | 2021.03.27 |
[BAEKJOON] 17472. 다리 만들기2 (0) | 2021.03.26 |
[BAEKJOON] 14502. 연구소 (0) | 2021.03.26 |