184. 암호 만들기
1) 어떤 전략(알고리즘)으로 해결?
- 브루트 포스
- for문을 마구마구 돌려돌려
- 조합도 활용해
2) 코딩 설명
- 모음은 하나, 자음은 두개가 꼭 있어야 함
- 그래서 모음의 조합을 꺼내줄 때
- l이 4라면 모음은 자음이 두개 이상 나올 수 있는 1개 혹은 2개로 조합구해줘야 함
- 5라면 모음은 자음이 두개 이상 나올 수 있는 1,2,3 개 조합을 구해줘야 함
- 즉 암호의 길이가 l개라면 모음은 최소 1부터 l-2개까지 의 조합 경우를 구해야 함
- 그렇게 각 조합의 경우를 구해서 이를 합쳐주는 과정을 거침 ~ nice
<내 풀이>
from operator import indexOf
import sys
from itertools import combinations
l,c = map(int, sys.stdin.readline().rstrip().split())
lis = list(sys.stdin.readline().rstrip().split())
mo = ['a', 'e', 'i', 'o', 'u']
lismo = []
liscpy = lis.copy()
for i in range(c) :
if liscpy[i] in mo :
lismo.append(lis.pop(lis.index((liscpy[i]))))
totallis = []
for i in range(1, l-1) :
lismocomb = []
lisjacomb = []
lismocomb.append(list(combinations(lismo,i)))
lisjacomb.append(list(combinations(lis,l-i)))
for k in lismocomb :
for kk in k :
for j in lisjacomb :
for jj in j :
res=list(kk+jj)
res.sort()
totallis.append("".join(res))
totallis.sort()
for i in totallis :
print(i)
<반성 점>
- combination 안에 여러 조합이 있어서 여러 for문을 통해서 각 하나하나의 튜플을 꺼내줘야 했다!
<배운 점>