문제: https://programmers.co.kr/learn/courses/30/lessons/84512
문제 설명
사전에 알파벳 모음 'A', 'E', 'I', 'O', 'U'만을 사용하여 만들 수 있는, 길이 5 이하의 모든 단어가 수록되어 있습니다. 사전에서 첫 번째 단어는 "A"이고, 그다음은 "AA"이며, 마지막 단어는 "UUUUU"입니다.
단어 하나 word가 매개변수로 주어질 때, 이 단어가 사전에서 몇 번째 단어인지 return 하도록 solution 함수를 완성해주세요.
제한사항
- word의 길이는 1 이상 5 이하입니다.
- word는 알파벳 대문자 'A', 'E', 'I', 'O', 'U'로만 이루어져 있습니다.
입출력 예
wordresult"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번째 단어입니다.
입출력 예 #3
"I"는 1563번째 단어입니다.
입출력 예 #4
"EIO"는 1189번째 단어입니다.
정답
# https://programmers.co.kr/learn/courses/30/lessons/84512
from itertools import product
def solution(word):
vowel = ['A', 'E', 'I', 'O', 'U']
l = []
for i in range(1, 6):
l.extend(map(''.join, product(vowel, repeat=i)))
l.sort()
return l.index(word) + 1
print(solution("AAAAE"))
print(solution("AAAE"))
print(solution("I"))
print(solution("EIO"))
풀이
파이썬의 product라는 기능을 이용해서 간단히 풀 수 있는 문제였습니다. 원소들을 중복해서 고를 수 있는 순열을 이용하여 해결할 수 있는데, 이를 1 ~ 6개까지 선택하여 배열을 만든 뒤 정렬하고 해당 단어의 인덱스 값을 찾으면 되는 문제입니다.
사전 순 이므로 sort()를 이용하여 간단히 정렬 가능하며 인덱스는 0부터 시작이므로 + 1을 해줘야 합니다.
'알고리즘 > 프로그래머스' 카테고리의 다른 글
프로그래머스 - 수식 최대화 / Python (0) | 2021.10.16 |
---|---|
프로그래머스 - 파일명 정렬 / Python (0) | 2021.10.16 |
프로그래머스 - 방문 길이 / Python (0) | 2021.10.16 |
프로그래머스 - 구명보트 / Python (0) | 2021.10.05 |
프로그래머스 - [3차] 압축 / Python (0) | 2021.10.05 |