BOJ

백준 1759 - 암호 만들기

yanJuicy 2022. 3. 2. 03:50
반응형

문제

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(00);
        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