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로도 풀 수 있다는데 한번 고민해봐야겠다.