itertools라이브러리 먼저 찾아봄..AAA같은 단어가 있으니까 중복순열을 이용했다.from itertools import product
def solution(word):
answer = 0
dictionary = []
for i in range(1, 6):
dictionary.extend(list(map(''.join, product(['A', 'E', 'I', 'O', 'U'], repeat = i))))
dictionary.sort()
answer = dictionary.index(word)+1
return answer
for문 안을 분석하자면
product(['A', 'E', 'I', 'O', 'U'], repeat = i)로 중복순열을 생성한다. 단어 1개씩 모든 조합, 2개씩 모든 조합 ... 5개씩 모든 조합- 이를
join해주고 리스트에 담아준다.append를 하게되면 리스트 안에 리스트가 추가되니까extend로 확장
그러면 모든 경우의 수가 담긴 아직 정렬은 되지 않은 사전이 완성된다.
이를 오름차순으로 정렬해주면 리얼 사전 완성!
그게 몇번째 인지가 우리에게 필요한 답이니까 index로 찾아주면 된다.
itertools 라이브러리알고리즘 문제를 풀다보면 종종 순열, 조합 개념이 등장한다. 근데 보통 그런 문제들 그렇게 안 풀고 다른 방법으로 풀다가.. 이번에는 진짜 이걸로 풀어야겠다..싶어서 itertools 라이브러리에 대해서 좀 찾아봤다.
itertools이 중에서 알고리즘에 주로 사용되는 순열, 조합, 중복순열에 대해서 정리하고자 한다.
combinations(iterable, r)iterable한 원소들 중 원소 개수가 r개인 조합 뽑기combinations_with_replacement(iterable,r)iterable한 원소들 중 원소개수가 r개인 중복조합 뽑기permutations(iterable,r=None)iterable한 원소들 중 원소 개수가 r개인 순열 뽑기r을 지정하지 않거나 r=None으로 하면 최대 길이의 순열이 리턴된다.product(*iterables, repeat=n)iterable들을 넣어줄 수 있음. 예를 들어 리스트 두개repeat=n은 n개씩 모든 조합을 구한다는 뜻프로그래머스 질문하기 탭 보니까 DFS로도 풀 수 있다는데 한번 고민해봐야겠다.