https://school.programmers.co.kr/learn/courses/30/lessons/84512

💡문제 분석 요약

사전에 알파벳 모음 'A', 'E', 'I', 'O', 'U'만을 사용하여 만들 수 있는, 길이 5 이하의 모든 단어가 수록되어 있습니다. 사전에서 첫 번째 단어는 "A"이고, 그다음은 "AA"이며, 마지막 단어는 "UUUUU"입니다.

A AA AAA AAAA AAAAA AAAAE… AAAE AAAU…

입출력 예

word result
"AAAAE" 6
"AAAE" 10
"I" 1563
"EIO" 1189

💡알고리즘 설계

빈 문자열에 모음을 하나씩 넣고 dfs를 시작한다.

문자열의 길이가 5을 넘으면 탐색을 중단하고, 현재 문자열이 답과 일치할 경우 인덱스를 따로 저장한 후 탐색이 끝나면 인덱스를 반환한다

💡코드

answer=0
answer_idx=0

def solution(word):
    l=''
    
    def dfs(count, l):
        global answer
        global answer_idx
        
        if count==6:
            return
        if l==word:
            answer_idx=answer
        answer+=1
        for i in 'AEIOU':
            dfs(count+1, l+i)
    
    dfs(0,l)
    
    return answer_idx

Untitled

답을 찾아도 탐색을 멈추지 않는 코드

answer=0
answer_idx=0

def solution(word):
    l=''
    
    def dfs(count, l):
        global answer
        global answer_idx
        
        if count==6 or answer_idx!=0:
            return
        if l==word:
            answer_idx=answer
            return
        answer+=1
        for i in 'AEIOU':
            dfs(count+1, l+i)
    
    dfs(0,l)
    
    return answer_idx

Untitled

답을 찾으면 탐색을 중단하도록 수정한 코드

시간이 훨씬 줄었다. 더 줄일 수 있을 것 같은데 지금은 방법이 생각이 나지 않음

💡시간복잡도

모르겠음

💡 틀린 이유