본문 바로가기

두두의 알고리즘/문제

[순열과 조합] 백준 1759번 '암호 만들기' (Python)

728x90

<문제 링크>

https://www.acmicpc.net/problem/1759

 

1759번: 암호 만들기

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

www.acmicpc.net


<문제 풀이>

  • 암호가 순서대로 정렬되어 있어야 하므로 combinations 사용
  • 최소 모음 1개 이상, 자음 2개 이상 있어야 함

<코드>

'''입력 예시
4 6
a t c i s w
'''
from itertools import combinations

l,c = map(int, input().split())
alpha = input().split()
alpha.sort()

result = list(combinations(alpha,l))

for idx in range(len(result)):
    result[idx] = ''.join(result[idx])
    leng = l
    if 'a' in result[idx]:
        leng -= 1
    if 'e' in result[idx]:
        leng -= 1
    if 'i' in result[idx]:
        leng -= 1
    if 'o' in result[idx]:
        leng -= 1
    if 'u' in result[idx]:
        leng -= 1
    if leng>=2 and leng<=(l-1):    
        print(result[idx])