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만 해주면 된다.
'Algorithm' 카테고리의 다른 글
프로그래머스 > 뒤에 있는 큰 수 찾기 (Python 3) (0) | 2024.07.31 |
---|---|
프로그래머스 > 롤케이크 자르기 (Python 3) (1) | 2024.07.24 |
프로그래머스 > [3차] 압축 (Python 3) (0) | 2024.07.17 |
프로그래머스 > 게임 맵 최단거리 (Python 3) (6) | 2024.07.16 |
프로그래머스 > k진수에서 소수 개수 구하기 (Python 3) (0) | 2024.07.15 |