[BOJ] 1759. 암호 만들기 (Python / Java)

백준 1759: 암호 만들기 (파이썬 / 자바)

 

1759번: 암호 만들기

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

www.acmicpc.net

정렬한 후 조합을 만들어 조합 안의 자음과 모음 개수를 센다

자바는 문자열 정렬을 할 줄 몰라서 아스키코드로 바꾼 후 정렬했음

 

파이썬

def combination(l, start):
    if l == L:
        v, c = 0, 0
        for s in selected:
            if s in vowels:
                v += 1
            else:
                c += 1
        if v >= 1 and c >= 2:
            print(''.join(selected))
        
        return
    
    for i in range(start, C):
        if visited[i] == True:
            continue
        
        selected[l] = lst[i]
        visited[i] = True
        combination(l + 1, i + 1)
        visited[i] = False
        
    
L, C = map(int, input().split())
lst = sorted(list(map(str, input().split())))

selected = [0] * L
visited = [0] * C
vowels = ['a', 'e', 'i', 'o', 'u']

combination(0, 0)

 

자바

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

public class B1759 {
    static int L;
    static int C;
    static int[] arr;
    static int[] selected;
    static boolean[] visited;

    static void combination(int l, int start) {
        if (l == L) {
            int v = 0;
            int c = 0;
            for (int n : selected) {
                // 자모음 개수 확인
                if (n == 97 || n == 101 || n == 105 || n == 111 || n == 117) {
                    v++;
                } else c++;
            }
            if (v >= 1 && c >= 2) {
                for (int n : selected) System.out.print((char)n + "");
            System.out.println();
            }
            return;
        }

        for (int i = start; i < arr.length; i++) {
            if (visited[i]) continue;
            selected[l] = arr[i];
            visited[i] = true;
            combination(l + 1, i + 1);
            visited[i] = false;
        }
    }

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());

        // C개 중 N개 선택하는 조합

        L = Integer.parseInt(st.nextToken());   // 암호 길이
        C = Integer.parseInt(st.nextToken());   // 사용된 알파벳의 수

        arr = new int[C];

        st = new StringTokenizer(br.readLine());
        for (int i = 0; i < C; i++) {
            arr[i] = ((int)st.nextToken().charAt(0));
        }

        selected = new int[L];
        visited = new boolean[C];
        Arrays.sort(arr);

        combination(0, 0);
    }
}