1. 문제 설명

사전에 알파벳 모음 'A', 'E', 'I', 'O', 'U'만을 사용하여 만들 수 있는, 길이 5 이하의 모든 단어가 수록되어 있다.

사전에서 첫 번째 단어는 "A"이고, 그다음은 "AA"이며, 마지막 단어는 "UUUUU"이다.

 

단어 하나 word가 매개변수로 주어질 때, 이 단어가 사전에서 몇 번째 단어인지 반환하라.

 

예)

"AAAAE" → 6

"AAAE" → 10

"I" → 1563

"EIO" → 1189

 

 

2. 코드

from itertools import product

def solution(word):
    dictionary = ["".join(list(j)) for i in range(1, 6) for j in product(['A', 'E', 'I', 'O', 'U'], repeat=i)]
    dictionary = sorted(dictionary)
    
    return dictionary.index(word) + 1

 

 

 

3. 설명

사전 순으로 배열은 sorted 함수로 자동 배열할 수 있어서, 이 문제의 핵심은 사전에 들어갈 요소들을 구성하는 데에 있다.

 

from itertools import product를 불러와서 길이 5 이하로 구성할 수 있는 조합 모두를 구한다.

 

예를 들어서 다음과 같은 경우에는 repeat=2 이므로 길이가 2인 모든 조합의 수를 구한다.

A = [1,2,3]
list(itertools.product(A, repeat=2))

[(1, 1), (1, 2), (1, 3), (2, 1), (2, 2), (2, 3), (3, 1), (3, 2), (3, 3)]

 

 

 

따라서, 문제에서는 가변길이이므로 repeat=i를 두고, i를 for 문으로 1부터 5까지 반복하도록 한다.

[ j for i in range(1, 6) for j in product(['A', 'E', 'I', 'O', 'U'], repeat=i) ]

 

이렇게 했을 때 결과는 다음과 같다.

 

- 길이 1 : ('A',), ('E',), ('I',), ('O',), ('U',)

 

- 길이 2 : ('A', 'A'), ('A', 'E'), ('A', 'I'), ('A', 'O'), ('A', 'U'), ('E', 'A'), ('E', 'E'), ('E', 'I'), ('E', 'O'), ('E', 'U'), ('I', 'A'), ('I', 'E'), ('I', 'I'), ('I', 'O'), ('I', 'U'), ('O', 'A'), ('O', 'E'), ('O', 'I'), ('O', 'O'), ('O', 'U'), ('U', 'A'), ('U', 'E'), ('U', 'I'), ('U', 'O'), ('U', 'U')

 

- 길이 3 : ('A', 'A', 'A'), ('A', 'A', 'E'), ('A', 'A', 'I'), ('A', 'A', 'O'), ('A', 'A', 'U'), ('A', 'E', 'A'), ('A', 'E', 'E'), ('A', 'E', 'I'), ('A', 'E', 'O'), ('A', 'E', 'U'), ('A', 'I', 'A'), ('A', 'I', 'E'), ... ,('U', 'O', 'O'), ('U', 'O', 'U'), ('U', 'U', 'A'), ('U', 'U', 'E'), ('U', 'U', 'I'), ('U', 'U', 'O'), ('U', 'U', 'U')

 

...

 

- 길이 5 : ('A', 'A', 'A', 'A', 'A'), ('A', 'A', 'A', 'A', 'E'), ('A', 'A', 'A', 'A', 'I'), ('A', 'A', 'A', 'A', 'O'), ('A', 'A', 'A', 'A', 'U'), ('A', 'A', 'A', 'E', 'A'), ('A', 'A', 'A', 'E', 'E'), ('A', 'A', 'A', 'E', 'I'), ('A', 'A', 'A', 'E', 'O'), ('A', 'A', 'A', 'E', 'U'), ... ('U', 'U', 'U', 'U', 'U', 'U')

 

 

이 j들을 join 해주고, dictionary 배열 sorting만 해주면 된다.

+ Recent posts