소스 코드(초기)

# 이번에 뽑을 모음의 수, 현재 위치, 현재까지의 단어, 현재까지 뽑은 모음의 수
def v_find(v_goal,v_idx,v_word,v_cnt):
# 모음을 다 뽑았으면
# 자음 뽑으러
if v_goal == v_cnt:
e_find(0,v_word,v_cnt)
return
for e in range(v_idx,v):
v_find(v_goal,e+1,v_word+[v_alpha[e]],v_cnt+1)
return
# 현재 위치, 현재까지 완성된 단어, 현재까지 뽑은 알파벳의 누적 수
def e_find(e_idx,e_word,e_cnt):
# l과 현재까지 뽑은 알파벳 수가 같은 경우
if l == e_cnt:
e_word.sort()
answer.append(''.join(e_word))
return
for r in range(e_idx,c-v):
e_find(r+1,e_word + [e_alpha[r]], e_cnt + 1)
return
l,c = map(int,input().split())
board = list(map(str,input().split()))
# 결과 저장할 곳
answer = []
# 모음의 수
v = 0
# 모음 저장
v_alpha = []
# 자음 저장
e_alpha = []
for q in board:
if q in ['a','e','i','o','u']:
v_alpha.append(q)
v += 1
else:
e_alpha.append(q)
# w = 이번에 뽑을 모음의 수
for w in range(1,min(l-1, v+1)):
v_find(w,0,[],0)
answer.sort()
for e in answer:
print(e)

 

소스 코드(수정)

# 현재 위치, 뽑은 수, 현재까지 완성된 단어
def find(idx,cnt,word):
# 알파벳을 다 뽑았으면
if cnt == l:
v_num = word.count('a') + word.count('e') + word.count('i') + word.count('o') + word.count('u')
# 모음 1개 이상, 자음 2개 이상 조건 확인
if l - v_num >= 2 and v_num >= 1:
word.sort()
answer.append(''.join(word))
for q in range(idx,c):
find(q+1,cnt+1,word+[board[q]])
return
l,c = map(int,input().split())
board = list(map(str,input().split()))
answer = []
find(0,0,[])
answer.sort()
for w in answer:
print(w)

 


해결 방법

 


느낀 점

 

 

ps. 개인적인 코드와 코드를 작성의 이유를 적은 것입니다.

 

오류적절치 않은 문법이 존재할 수 있으며, 다른 분들께는 굉장히 비효율적인 방법으로 여겨질 수 있습니다.

 

혹시 개선 사항, 오류 및 문제에 대한 수정 사항 등을 댓글로 남겨주신다면 감사한 마음으로 배우고 수정하겠습니다.