코테 공부/프로그래머스
[Python] 모음사전 / 중복순열
prefer_all
2023. 1. 8. 15:33
문제
사전에 알파벳 모음 '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 |
풀이
itertools.product (중복순열)을 사용한다
'''
A,E,I,O,U를 사용해서 길이 5 이하인 단어 모음집
A -> AA -> AAA.. -> UUUUU
word가 사전에서 몇 번째 단어인가
idea: 단어집을 구축하고 몇 번째인지 찾기
중복 순열(itertools product)
'''
from itertools import product
def solution(word):
words = [] # 나올 수 있는 combination을 담는 list
alphabet = ['A', 'E', 'I', 'O', 'U']
for i in range(1, 6):
tmp = list(product(alphabet,repeat=i))
for i in tmp:
tmp_word = ''.join(i)
words.append(tmp_word)
words.sort()
return words.index(word) + 1
combinations(조합. 순서가 중요하지 않는 경우)만 주로 사용했었는데 이 문제를 통해 itertools의 순열 함수들도 익힐 수 있었다.
📝
product
1. 데카르트 곱
from itertools import product
iterator1 = [1, 2, 3]
iterator2 = ['A', 'B', 'C']
print(list(product(iterator1, iterator2)))
# [(1, 'A'), (1, 'B'), (1, 'C'), (2, 'A'), (2, 'B'), (2, 'C'), (3, 'A'), (3, 'B'), (3, 'C')]
print([(i,j) for i in iterator1 for j in iterator2])
# [(1, 'A'), (1, 'B'), (1, 'C'), (2, 'A'), (2, 'B'), (2, 'C'), (3, 'A'), (3, 'B'), (3, 'C')]
2. 중복순열
from itertools import product
iterator = ['A','B','C','D','E']
print(list(product(iterator, repeat = 1)))
# [('A',), ('B',), ('C',), ('D',), ('E',)]
print(list(product(iterator, repeat = 2)))
# [('A', 'A'), ('A', 'B'), ('A', 'C'), ('A', 'D'), ('A', 'E'), ('B', 'A'), ('B', 'B'), ('B', 'C'), ('B', 'D'), ('B', 'E'), ('C', 'A'), ('C', 'B'), ('C', 'C'), ('C', 'D'), ('C', 'E'), ('D', 'A'), ('D', 'B'), ('D', 'C'), ('D', 'D'), ('D', 'E'), ('E', 'A'), ('E', 'B'), ('E', 'C'), ('E', 'D'), ('E', 'E')]
📝
permutation (중복 없는 순열)
from itertools import permutations
iterator = ['A','B','C']
print(list(permutations(iterator)))
# [('A', 'B', 'C'), ('A', 'C', 'B'), ('B', 'A', 'C'), ('B', 'C', 'A'), ('C', 'A', 'B'), ('C', 'B', 'A')]
print(list(permutations(iterator, 2)))
# [('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'C'), ('C', 'A'), ('C', 'B')]