[프로그래머스] Lv.2 모음사전 (Python)

seulzzang·2022년 9월 27일
0

코딩테스트 연습

목록 보기
21/44
post-thumbnail

📍문제

[프로그래머스] Lv.2 모음사전

📍풀이

  • 사실 이거 순열, 조합 이용하는 것 같아서 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문 안을 분석하자면

  1. product(['A', 'E', 'I', 'O', 'U'], repeat = i)로 중복순열을 생성한다. 단어 1개씩 모든 조합, 2개씩 모든 조합 ... 5개씩 모든 조합
  2. 이를 join해주고 리스트에 담아준다.
  3. append를 하게되면 리스트 안에 리스트가 추가되니까 extend로 확장

그러면 모든 경우의 수가 담긴 아직 정렬은 되지 않은 사전이 완성된다.
이를 오름차순으로 정렬해주면 리얼 사전 완성!
그게 몇번째 인지가 우리에게 필요한 답이니까 index로 찾아주면 된다.

📋itertools 라이브러리

알고리즘 문제를 풀다보면 종종 순열, 조합 개념이 등장한다. 근데 보통 그런 문제들 그렇게 안 풀고 다른 방법으로 풀다가.. 이번에는 진짜 이걸로 풀어야겠다..싶어서 itertools 라이브러리에 대해서 좀 찾아봤다.

itertools

  • 효율적인 루핑을 위한 이터레이터를 만드는 함수

이 중에서 알고리즘에 주로 사용되는 순열, 조합, 중복순열에 대해서 정리하고자 한다.

1. combinations(iterable, r)

  • iterable한 원소들 중 원소 개수가 r개인 조합 뽑기

2. combinations_with_replacement(iterable,r)

  • iterable한 원소들 중 원소개수가 r개인 중복조합 뽑기

3.permutations(iterable,r=None)

  • iterable한 원소들 중 원소 개수가 r개인 순열 뽑기
  • r을 지정하지 않거나 r=None으로 하면 최대 길이의 순열이 리턴된다.

4. product(*iterables, repeat=n)

  • 중복순열 구하기 (문제에서 사용한 함수)
  • 여러 iterable들을 넣어줄 수 있음. 예를 들어 리스트 두개
  • 모든 원소들의 짝을 찾아서 리턴한다.
  • repeat=n은 n개씩 모든 조합을 구한다는 뜻

프로그래머스 질문하기 탭 보니까 DFS로도 풀 수 있다는데 한번 고민해봐야겠다.

profile
중요한 것은 꺾이지 않는 마음

0개의 댓글