프로그래머스 모음사전 코드 및 해설 (파이썬)

2021. 11. 3. 13:31algorithm

반응형

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

 

코딩테스트 연습 - 모음사전

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

programmers.co.kr

 

재귀함수를 활용해 풀이했습니다. 주어진 스트링의 직전 스트링의 형태를 파악하고 여기에 +1 하는 식으로 풀이했습니다. 예를 들어 EIO의 직전 스트링은 EIIUU이므로, EIIUU의 순서에 1을 더한 것을 최종 답으로 반환하는 식입니다.

이를 위해 마지막 문자가 A가 아닌 경우는 그 문자의 전 문자(ex. E의 전 문자는 A, I의 전 문자는 E)로 바꾸고 길이가 5보다 작으면 남은 자리를 모두 U로 채우는 식으로 직전 스트링을 구했습니다.

마지막 문자가 A인 경우는 마지막 문자 전까지를 직전 스트링으로 설정했습니다. (ex. EIA의 직전 스트링은 EI)

 

vowels = ['A','E','I','O','U']
orders = {'A':1,'E':782,'I':1563, 'O':2344, 'U':3125}

def find_order(word):
    if len(word) < 2:
        return orders[word]
    blanks = 5 - len(word)
    # ex) EIO는 EIIUU 바로 다음이므로 
    if word[-1] != 'A': # 무한루프 방지 
        return find_order(word[:-1] + vowels[vowels.index(word[-1])-1] + 'U'*(blanks)) + 1
    # ex) EIA는 EI 바로 다음이므로 
    return find_order(word[:-1]) + 1
    
def solution(word):
    if word in orders:
        return orders[word]
    return find_order(word)
반응형