반응형
문제
https://www.acmicpc.net/problem/1759
1759번: 암호 만들기
첫째 줄에 두 정수 L, C가 주어진다. (3 ≤ L ≤ C ≤ 15) 다음 줄에는 C개의 문자들이 공백으로 구분되어 주어진다. 주어지는 문자들은 알파벳 소문자이며, 중복되는 것은 없다.
www.acmicpc.net
풀이
재귀탐색을 통해 모든 경우의 암호를 만든다.
하나의 암호를 만들었을 때 모음과 자음의 수를 세서 문제 조건에 맞는지 확인한다.
정렬된 문자열을 얻기위해 처음 입력을 받는 배열을 정렬해서 재귀 탐색을 시작한다.
코드
java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
import java.util.Arrays;
import java.util.Scanner;
public class Main {
static int l, c;
static String[] a;
static StringBuilder sb = new StringBuilder();
static StringBuilder password = new StringBuilder();
public static void main(String[] args) {
input();
solve(0, 0);
System.out.println(sb.toString());
}
private static void solve(int len, int n) {
if (len == l) {
if (validate())
sb.append(password.toString()).append("\n");
} else {
for (int i = n; i < c; i++) {
password.append(a[i]);
solve(len + 1, i + 1);
password.delete(password.length() - 1, password.length());
}
}
}
private static boolean validate() {
String str = password.toString();
int cnt = 0;
for (char c : str.toCharArray()) {
if (c == 'a' || c == 'e'|| c == 'i' || c == 'o' || c == 'u')
cnt++;
}
return cnt >= 1 && str.length() - cnt >= 2;
}
private static void input() {
Scanner sc = new Scanner(System.in);
l = sc.nextInt();
c = sc.nextInt();
a = new String[c];
for (int i = 0; i < c; i++)
a[i] = sc.next();
Arrays.sort(a);
sc.close();
}
}
|
cs |
반응형
'BOJ' 카테고리의 다른 글
백준 2110 - 공유기 설치 (0) | 2022.03.11 |
---|---|
백준 1068 - 트리 (0) | 2022.03.10 |
백준 - 랜선 자르기 (0) | 2022.02.28 |
백준 9095 - 1, 2, 3 더하기 (0) | 2022.02.26 |
백준 2252 - 줄 세우기 (0) | 2022.02.22 |