문제 설명
사전에 알파벳 모음 '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번째 단어입니다.
입출력 예 #3
"I"는 1563번째 단어입니다.
입출력 예 #4
"EIO"는 1189번째 단어입니다.
나의 답
from itertools import product
def solution(word):
alpha = ['A', 'E', 'I', 'O', 'U']
dict = []
for length in range(1,6):
for comb in product(alpha, repeat=length):
dict.append(''.join(comb))
dict.sort()
return dict.index(word) + 1
- 문제는 A, E, I, O, U로 만들 수 있는 길이 1~5의 모든 단어 중 특정 단어의 순서를 찾는 것이었다.
- 알고리즘 분류가 완전 탐색으로 되어 있지 않았더라면 완전 탐색할 생각 못했을 것 같다..
- itertools의 product를 사용해 길이 1~5의 모든 조합을 생성하고 사전순으로 정렬하여 해결했다.
- 가능한 단어 개수가 3905개라서 완전 탐색이어도 성능상 문제는 없었다.
- 가중치 방식도 있었는데 훨씬 효율적이었지만, 바로 떠올릴 수는 없는 방식이라고 생각해 풀이법 자체를 기억해두기로 했다.
'기록 > TIL' 카테고리의 다른 글
| [TIL] 250911 - 프로그래머스 숫자의 표현 (0) | 2025.09.11 |
|---|---|
| [TIL] 250802 - 프로그래머스 여행경로 (4) | 2025.08.02 |
| [TIL] 250717 - 프로그래머스 아이템 줍기 (0) | 2025.07.17 |
| [TIL] 250717 - 프로그래머스 섬 연결하기 (1) | 2025.07.17 |
| [TIL] 250716 - 프로그래머스 전력망을 둘로 나누기 (0) | 2025.07.16 |