문제 설명
사전에 알파벳 모음 'A', 'E', 'I', 'O', 'U'만을 사용하여 만들 수 있는, 길이 5 이하의 모든 단어가 수록되어 있습니다. 사전에서 첫 번째 단어는 "A"이고, 그다음은 "AA"이며, 마지막 단어는 "UUUUU"입니다.
단어 하나 word가 매개변수로 주어질 때, 이 단어가 사전에서 몇 번째 단어인지 return 하도록 solution 함수를 완성해주세요.
제한사항
- word의 길이는 1 이상 5 이하입니다.
- word는 알파벳 대문자 'A', 'E', 'I', 'O', 'U'로만 이루어져 있습니다.
입출력 예
| word | result |
| "AAAAE" | 6 |
| "AAAE" | 10 |
| "I" | 1563 |
| "EIO" | 1189 |
입출력 예 #1
사전에서 첫 번째 단어는 "A"이고, 그다음은 "AA", "AAA", "AAAA", "AAAAA", "AAAAE", ... 와 같습니다. "AAAAE"는 사전에서 6번째 단어입니다.
입출력 예 #2
"AAAE"는 "A", "AA", "AAA", "AAAA", "AAAAA", "AAAAE", "AAAAI", "AAAAO", "AAAAU"의 다음인 10번째 단어입니다.
코드 설명
중복 순열 product를 이용했습니다. 먼저 알파벳 모음(A,E,I,O,U)을 모은 배열 alpha와 모음 사전이 담길 배열 dictionary를 선언했습니다. 반복문을 통해 dictionary에 alpha의 중복 순열 순서쌍 order를 담는데요, 나중에 하나의 문자열로 처리하기 위해 ''.join(order) 형태로 저장합니다.
반복문 종료 후에는 dictionary 안의 단어들이 아직 사전 순으로 정렬된 상태가 아니기 때문에 sort() 메소드를 통해 정렬을 실시합니다.
이후 주어진 문자열 "word"가 dictionary 안의 몇 번째 문자열인지 알아내 출력하면 되겠습니다.
from itertools import product
def solution(word):
answer = 0; num = 1
alpha = ["A","E","I","O","U"]
dictionary = []
for i in range(5) :
for order in product(alpha,repeat=num) :
dictionary.append(''.join(order))
num += 1
dictionary.sort()
for i in range(len(dictionary)) :
answer += 1
if word == dictionary[i] :
break
return answer
앗, 그런데 마지막 반복문은 굳이 필요없겠죠? Python의 index()를 이용하면 찾고자 하는 단어 word가 사전의 몇 번째 인덱스에 위치해있는지 파악할 수 있습니다.
from itertools import product
def solution(word):
num = 1
alpha = ["A","E","I","O","U"]
dictionary = []
for i in range(5) :
for order in product(alpha,repeat=num) :
dictionary.append(''.join(order))
num += 1
dictionary.sort()
answer = dictionary.index(word) + 1
return answer
또는 등비 수열의 합을 이용한 코드도 있습니다.
def solution(word):
answer = 0
for i, n in enumerate(word):
answer += (5 ** (5 - i) - 1) / (5 - 1) * "AEIOU".index(n) + 1
return answer'알고리즘 공부' 카테고리의 다른 글
| [프로그래머스] 가장 먼 노드 - 파이썬(Python) (0) | 2023.08.22 |
|---|---|
| [멀티잇 코딩테스트 러닝클래스] 그래프(Graph) : 구름이의 여행 - 파이썬(Python) (0) | 2023.08.22 |
| [멀티잇 코딩테스트 러닝클래스] 다이나믹 프로그래밍(DP) : 피보나치 수, 보드게임, 거리두기 - 파이썬(Python) (2) | 2023.08.21 |
| [프로그래머스] 피로도 - 파이썬(Python) (1) | 2023.08.20 |
| [멀티잇 코딩테스트 러닝클래스] 그리디(Greedy) : 거스름돈, 구름 스퀘어, 직사각형 만들기 - 파이썬(Python) (0) | 2023.08.20 |