1. 문제 설명
- 사전에 알파벳 모음 'A', 'E', 'I', 'O', 'U' 만을 사용하여 만들 수 있는 길이 5 이하의 모든 단어가 수록되어 있다.
- 사전에서 첫 번째 단어는 "A"이고 그다음은 "AA"이며, 마지막 단어는 "UUUUU"이다.
- 단어 하나 word가 매개변수로 주어질 때, 이 단어가 사전에서 몇 번째 단어인지 return 하라
2. 제한사항
-
- word의 길이는 1 이상 5 이하이다.
- word는 알파벳 대문자 'A', 'E', 'I', 'O', 'U' 으로만 이루어져 있다.
3. 입출력 예
word | result |
"AAAAE" | 6 |
"AAAE" | 10 |
"I" | 1563 |
"EIO" | 1189 |
- 사전에서 첫 번째 단어는 A -> AA -> ... -> AAAAA -> AAAAE 이므로 6번째 단어이다.
- "AAAE"는 "A", "AA", "AAA", "AAAA", "AAAAA", "AAAAE", "AAAAI", "AAAAO", "AAAAU"의 다음인 10번째 단어이다.
4. 풀이 접근
- 사전에 모든 단어들을 수록해야하므로 중복순열을 이용해서 모든 단어를 사전에 수록한다.
- 사전을 내림차순으로 정렬한다.
- 그리고 하나의 단어로 만들어준다.
- 비교한다.
5. 코드
from itertools import product
def solution(word):
dic = []
answer = 0
for i in range(1,6): #5가지 단어를 조합하여 중복포함 단어 생성
for j in product(['A','E','I','O','U'],repeat = i):
dic.append(j)
dic = sorted([str(("").join(key)) for key in dic]) #단어순으로 정렬 후 사전 만들기
return dic.index(word) + 1
- 순열을 이용하여 모든 단어를 생성하고 정렬해준다.
6. 알아둘만한 문법
dic.index(word)
- dic이란 리스트안에 word라는게 몇 번째 index에 있는지 출력
- 원하는 단어가 몇 번째 인덱스에 있는지 확인
#중복 순열
from itertools import product
for i in product([1,2,3],'ab'):
print(i, end=" ")
(1, 'a') (1, 'b') (2, 'a') (2, 'b') (3, 'a') (3, 'b')
for i in product(range(3), range(3), range(3)):
print(i, end=" ")
(0, 0, 0) (0, 0, 1) (0, 0, 2) (0, 1, 0) (0, 1, 1) (0, 1, 2) (0, 2, 0) (0, 2, 1) (0, 2, 2) (1, 0, 0) (1, 0, 1) (1, 0, 2) (1, 1, 0) (1, 1, 1) (1, 1, 2) (1, 2, 0) (1, 2, 1) (1, 2, 2) (2, 0, 0) (2, 0, 1) (2, 0, 2) (2, 1, 0) (2, 1, 1) (2, 1, 2) (2, 2, 0) (2, 2, 1) (2, 2, 2)
for i in product([1,2,3], repeat=2):
print(i, end=" ")
(1, 1) (1, 2) (1, 3) (2, 1) (2, 2) (2, 3) (3, 1) (3, 2) (3, 3)
for i in product([1,2,3], repeat=3):
print(i, end=" ")
(1, 1, 1) (1, 1, 2) (1, 1, 3) (1, 2, 1) (1, 2, 2) (1, 2, 3) (1, 3, 1) (1, 3, 2) (1, 3, 3) (2, 1, 1) (2, 1, 2) (2, 1, 3) (2, 2, 1) (2, 2, 2) (2, 2, 3) (2, 3, 1) (2, 3, 2) (2, 3, 3) (3, 1, 1) (3, 1, 2) (3, 1, 3) (3, 2, 1) (3, 2, 2) (3, 2, 3) (3, 3, 1) (3, 3, 2) (3, 3, 3)
'CodingTest > 완전 탐색(구현)' 카테고리의 다른 글
프로그래머스 (Level 2) - 피로도 (0) | 2022.08.09 |
---|---|
프로그래머스 (Level 2) - 최소직사각형 (0) | 2022.08.09 |
프로그래머스 (Level 2) - 카펫 (0) | 2022.08.08 |
프로그래머스 (Level 2) - 소수 찾기 (0) | 2022.08.07 |
프로그래머스 (Level 1) - 모의고사 (0) | 2022.08.07 |