Development/Algorithm

[백준] 1759번: 암호 만들기 (python)

jstar0525 2021. 5. 10. 21:24
반응형

www.acmicpc.net/problem/1759

 

1759번: 암호 만들기

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

www.acmicpc.net

import sys
from itertools import combinations

def divide_alphabet(alphabet):

    vowel = []
    consonant = []

    for a in alphabet:
        if a in ['a', 'e', 'i', 'o', 'u']:
            vowel.append(a)
        else:
            consonant.append(a)

    return vowel, consonant

def make_subset_num(L):

    LV = 1
    LC = 2
    num = []

    for v in range(LV,L-LC+1):
        num.append([v,L-v])
    
    return num

def make_subset(num, vowel, consonant):

    subset = []

    for n in num:
        subset_v = list(combinations(vowel, n[0]))
        subset_c = list(combinations(consonant, n[1]))

        for sv in subset_v:
            for sc in subset_c:
                subset.append(sorted(list(sv)+list(sc)))

    return sorted(subset)

if __name__ == '__main__':

    L, C = map(int, sys.stdin.readline().split())
    alphabet = list(sys.stdin.readline().split())

    vowel, consonant = divide_alphabet(alphabet)
    num = make_subset_num(L)
    subset = make_subset(num, vowel, consonant)
    
    for sub in subset:
        print(''.join(sub))
반응형