# 입력받기
a, b = map(int, input().split()) # a: 만들 암호 길이, b: 알파벳 개수
ls = list(input().split()) # 사용할 알파벳 리스트
ls.sort() # 알파벳 정렬 (사전순 출력을 위해)
# 모음과 자음을 구분
left = [i for i in ls if i in ['a', 'e', 'i', 'o', 'u']] # 모음
right = [i for i in ls if i not in ['a', 'e', 'i', 'o', 'u']] # 자음
# 조합 생성 함수
def combinations(arr, n, new, c):
answer = []
# 원하는 길이(n)만큼 조합이 완성된 경우
if len(new) == n:
return [new]
# 조합 생성
for i in range(c, len(arr)):
answer.extend(combinations(arr, n, new + [arr[i]], i + 1))
return answer
# 주어진 알파벳 리스트에서 길이가 a인 모든 조합 생성
all_list = [''.join(k) for k in combinations(ls, a, [], 0)]
# 조건에 맞는 암호 출력
for l in all_list:
mo = sum([1 for i in l if i in left]) # 해당 조합의 모음 개수
za = sum([1 for i in l if i in right]) # 해당 조합의 자음 개수
# 모음이 1개 이상, 자음이 2개 이상인 경우만 출력
if mo >= 1 and za >= 2:
print(l)
풀이
이 코드는 암호를 만들기 위한 알고리즘이다.
사용자는 암호의 길이와 사용할 알파벳을 입력하고, 프로그램은 주어진 조건에 맞는 암호를 출력한다.
먼저 입력받은 알파벳 리스트를 정렬하여 사전순 출력을 보장한다.
이후 알파벳을 모음과 자음으로 분류한다. 조합 생성 함수를 사용하여 주어진 알파벳 중 길이가 지정된 암호 길이와 동일한 모든 조합을 만든다. 만들어진 조합에서 모음이 1개 이상이고 자음이 2개 이상인 조합만 출력한다.