주어진 문자열에서 만들 수 있는 암호열에 대해 최소 1개 이상의 모음, 최소 2개 이상의 자음을 만족하는 암호열을 출력하는 문제다.
처음에는 단순히 주어진 문자열에서 가능한 모든 경우의 수를 어떻게 생각해야할지 막막했고, 코드를 못 썼다.
파이썬 itertools
라이브러리의 combinations
메소드를 이용해, 문자열에서 길이 l
에 해당하는 모든 암호의 경우의 수를 뽑아낼 수 있었다.
해결 과정은 다음과 같다.
- 모음에 해당하는 배열을 선언한다.
- 주어진 문자열을 입력받고, 정렬한다. (문제에서 정렬 조건이 있음)
combinations
를 이용해 길이l
에 해당하는 모든 경우의 수를 추출하는for
문을 작성한다.- 추출한 경우에서 최소 모음 1개, 최소 자음 2개를 만족하는지 판별하고, 만족하면 출력한다.
from itertools import combinations
import sys
input = sys.stdin.readline
vowels = ('a', 'e', 'i', 'o', 'u')
l, c = map(int, input().split())
char_list = list(input().split())
char_list.sort()
# 가능한 경우의 수 추출
for char in combinations(char_list, l):
count = 0
# 모음 개수 기반 판별
for i in char:
if i in vowels:
count+= 1
if count >= 1 and count <= l-2:
print("".join(char))