소스 코드(초기)

# 이번에 뽑을 모음의 수, 현재 위치, 현재까지의 단어, 현재까지 뽑은 모음의 수
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. 개인적인 코드와 코드를 작성의 이유를 적은 것입니다.

 

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

 

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