https://www.acmicpc.net/problem/1759
1759번: 암호 만들기첫째 줄에 두 정수 L, C가 주어진다. (3 ≤ L ≤ C ≤ 15) 다음 줄에는 C개의 문자들이 공백으로 구분되어 주어진다. 주어지는 문자들은 알파벳 소문자이며, 중복되는 것은 없다.www.acmicpc.net
알고리즘생각만했는데 알고보니 브루트포스였다.
먼져, 입력으로 문자열을 정렬해서 받고, 모음의 갯수를 비교할 set(aeiou)를 만들어준다.
dfs를 통하여 모든 조합을 구하고, 만일 조합과 aeiou의 set이 1 이상이고 l-1 미만인 경우만
(모음이 1개 이상이고, 모음이 아닌게 2개 이상일 경우):
조합을 출력한다.
l,c=map(int,input().split())aeiou=set('aeiou')alpha=sorted(input().split())
password=[]def dfs(start=0): if len(password)==l:
set_password=set(password) if l-1>len(set_password & aeiou)>=1 :
print(''.join( password)) return for i in range(start,c):
if alpha[i] not in password: password.append(alpha[i])
dfs(i+1) password.pop() returndfs()##itertools사용코드##
from itertools import combinationsl,c=map(int,input().split())aeiou=set('aeiou')
alpha=sorted(input().split())password=combinations(alpha,l)for p in password:
if l-1>len(set(p)&aeiou)>=1: print(''.join(p))출력에 띄어쓰기가 없는걸 조심하자