본문 바로가기
프로그래머스

[프로그래머스] lv2. 모음 사전 - Python

by whereisco 2023. 6. 8.

문제

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

위 문제는 중복 순열을 활용해주어야 하는 문제입니다.

문제를 살펴보면 A, E, I, O, U 만을 활용하여 만들 수 있는 크기가 6 이하인 모든 단어를 구해주어야 하는 것을 알 수 있습니다.

또한, 주어진 입력 예제를 보았을 때, AAAAE는 6을 리턴하므로, A - AA - AAA - AAAA - AAAAA 다음에 위치하는 것을 알 수 있습니다.

따라서, 순서를 고려하여 뽑아야 하고, 중복을 허용하여 뽑는 경우이므로, 이는 중복수열임을 알 수 있습니다.

(파이썬에서는 itertools 모듈의 product를 활용하여 중복순열을 구해줄 수 있습니다.)

또한, 모든 경우의 수가 오름차순 정렬된 것을 보장해주어야 하기 때문에 내장함수를 활용해 정렬해줍니다.

Python

from itertools import product
def solution(word):
    answer = 0
    alphabet = ['A', 'E', 'I', 'O', 'U']
    
    candidates = []
    for i in range(1,6):
        for j in product(alphabet, repeat = i):
            candidates.append(list(j))
    
    candidates.sort()
    
    return candidates.index(list(word)) + 1