프로그래머스_모음 사전(2)

임정민·2024년 1월 27일
1

알고리즘 문제풀이

목록 보기
153/173
post-thumbnail

프로그래머스 Lv2 문제입니다. 실전에 대비하기 위해 60분 시간제한을 두고 풀었습니다.

문제

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

[나의 풀이]

⌛ 48분


from itertools import product

def solution(word):
    
    words = ['A', 'E', 'I', 'O', 'U']
    answer = 0
    tmp = []
    
    for i in range(1,6):
        for x in product(words,repeat=i):
            tmp.append("".join(x))
            
    tmp.sort()
    answer = tmp.index(word)+1

    return answer

알파벳 모음 'A', 'E', 'I', 'O', 'U'만을 사용하여 만들 수 있는 길이 5 이하의 모든 단어의 순서가

'A', 'AA', 'AAA', 'AAAA', 'AAAAA', 'AAAAE', 'AAAAI', 'AAAAO', 'AAAAU', 'AAAE', 'AAAEA', 'AAAEE', 'AAAEI', 'AAAEO', 'AAAEU' 의 형태일 때, 입력된 단어의 번호를 구하는 문제입니다.

itertools의 product를 활용하여 만들 수 있는 모든 경우의 수를 구하고
이를 정렬한다면 문제에서 요구하는 형태의 순서로 만들었습니다.

이후 입력된 단어의 인덱스를 통해 답을 도출하였습니다.

[다른 사람의 풀이]


def solution(word):
    
    word_list = []
    words = 'AEIOU'
    
    def dfs(cnt, w):

        if cnt == 5:
            return 
        for i in range(len(words)):
            word_list.append(w + words[i])
            dfs(cnt+1, w + words[i])
            
    dfs(0,"")
    
    return word_list.index(word)+1

solution("AE")

DFS를 활용한 풀이입니다. 최대 길이가 5인 단어로 DFS 재귀함수를 돌린다면,

'A'~'AAAAA'까지 진행된 뒤, 길이가 5인 'AAAAA'는 return되고 이후
'AAAA'부터 다시 문자열을 추가하며 'AAAAE'~'AAAAU'까지 진행됩니다.

이런 과정을 반복하면 문제에서 요구한 순서대로 return 되어 단어가 입력되었을 때, 인덱스를 활용하면 답을 구할 수 있는 풀이였습니다.

감사합니다.

profile
https://github.com/min731

0개의 댓글