https://programmers.co.kr/learn/courses/30/lessons/84512
사전에 알파벳 모음 'A', 'E', 'I', 'O', 'U'만을 사용하여 만들 수 있는, 길이 5 이하의 모든 단어가 수록되어 있습니다. 사전에서 첫 번째 단어는 "A"이고, 그다음은 "AA"이며, 마지막 단어는 "UUUUU"입니다.
단어 하나 word가 매개변수로 주어질 때, 이 단어가 사전에서 몇 번째 단어인지 return 하도록 solution 함수를 완성해주세요.
처음에는 규칙을 찾아서 풀라고 했다.
다른 사람의 풀이를 보니 그렇게도 풀 수 있더라
하지만,
내가 생각했을때, 이 문제의 출제 의도는 규칙을 찾아서 수학적으로 푸는 것이 아니라고
생각한다.
자리수가 5개 밖에 없으므로 브루탈포스로 충분히 풀 수 있고
그것이 코딩을 활용한 풀이라 보았다.
여기선 product의 개념이 필요한데
중복을 허용하고 순서의 상관없는 모든 조합을 뽑아내는 기능을 한다고 보면된다.
product(['a','b','c'], repeat=2)
-> [('a', 'a'), ('a', 'b'), ('a', 'c'), ('b', 'a'), ('b', 'b'), ('b', 'c'), ('c', 'a'), ('c', 'b'), ('c', 'c')]
['A','E','I','O','U'] 로 만들 수 있는 모든 product를 만들고
sort를 이용하여 사전순으로 정렬한 뒤,
인덱스를 찾아주면 된다.
얼마나 무식하면서 스마트한? 방법인가 ㅎㅎ
from itertools import product
def solution(word):
answer = 0
result = []
for i in range(1, 6):
for pd in list(product(['A', 'E', 'I', 'O', 'U'], repeat=i)):
result.append(''.join(pd))
result.sort()
return result.index(word) + 1