https://school.programmers.co.kr/learn/courses/30/lessons/84512
사전에 알파벳 모음 'A', 'E', 'I', 'O', 'U'만을 사용하여 만들 수 있는, 길이 5 이하의 모든 단어가 수록되어 있습니다. 사전에서 첫 번째 단어는 "A"이고, 그다음은 "AA"이며, 마지막 단어는 "UUUUU"입니다.
단어 하나 word가 매개변수로 주어질 때, 이 단어가 사전에서 몇 번째 단어인지 return 하도록 solution 함수를 완성해주세요.
입력 예시
해당 문제는 단어 간의 규칙을 찾는 것이 가장 중요했다. 계속해서 규칙을 생각해보다가 막히는 부분이 있었고, 구글링을 통해 보완하였다.
다른 블로그를 참고한 결과, 크게 두 가지 방식으로 문제 풀이가 진행되었다.
- 1) 수식을 활용한 모음 사전의 규칙 찾기
- 2) 직접 모음 조합을 통해 모음 사전을 구현한 후, 해당 사전에서 단어의 위치를 찾아 index 번호를 리턴하기
2)의 경우는 해당 문제에서 word의 길이가 최대 5개로, 작은 길이를 가지기 때문에 가능한 방식이다.
1) 의 경우 다음 블로그들에서 규칙 참고를 하였다.
모음사전 풀이 설명(1)
모음사전 풀이 설명(2)
2) 의 경우 다음 블로그를 참고하였다. (설명이 아주 잘 나와있다.)
모음사전 직접 구현
본 문제를 2)번 방식으로 구현하면서 product 라이브러리에 대해 알게 되었다.
product([뽑아낼 데이터], repeat=뽑는 개수)
- product 라이브러리는 위와 같이 사용할 수 있다. 본 문제에서는 product 라이브러리를 통해 뽑아낸 알파벳을 연결해 하나의 단어로 나타냈기 때문에 "".join을 사용해 한 단어로 만들어주었다.
한 배열의 요소 값들을 다른 배열에 추가할 때 extend()를 사용한다. append()를 사용하면 배열 자체가 다른 배열에 추가되며, extend()를 사용 시 배열의 요소만 추가 가능하다.
total_dict.extend(dictionary)
dictionary 배열의 요소 값들이 total_dict 배열에 추가된다.
✏️ 2번 방식으로 구현한 코드이다.
from itertools import product
def solution(word):
answer = 0
total_dict = []
for i in range(1, 6):
dictionary = list(map("".join, product(['A','E','I','O','U'], repeat = i)))
total_dict.extend(dictionary)
total_dict.sort()
for i in range(len(total_dict)):
if total_dict[i] == word:
answer = i+1
return answer
✏️ 1번 방식으로 구현한 코드도 추후 업로드할 예정이다 😊