본문 바로가기

코딩

프로그래머스 - 코딩테스트 고득점 Kit - 완전탐색 - 모음사전 (python)

728x90

https://school.programmers.co.kr/learn/courses/30/lessons/84512

일단 문제는 위 링크를 참고하시면 됩니다~

 

문제 설명을 하기 앞서 해당 코드는 굉장히 효율성에서 떨어진다는 것을 강조하고 설명들어가도록 하겠습니다~ 

생각한 알고리즘

0. 단어의 길이가 최대 5까지 될 수 있고, 같은 문자 5개가 들어가는 경우도 있으므로

각 원소에 대해 5개씩 문자열에 넣었다.

1. 단어의 길이가 i+1 (1 ~ 5)인 것들 생성(list(itertools.permutations(alphabet, i+1)) 이용)

2. tuple 형태로 저장되니 map(lambda x: x ~~ )를 이용하여 1) list, 2) ''.join() 순으로 변환 

3. for문에서 계속 추가하기

4. 중복되는 값이 있을 수 있으니 set을 이용하여 중복값 제거, list로 저장

5. sort()를 이용하여 모든 경우의 수가 담긴 printList를 사전순으로 정렬

6. printList에서 word를 원소로 가지는 인덱스에다가 1을 더하여 출력

 

*1, 2에 대해서 자세히 알고싶다면 https://declare0703.tistory.com/92 의 1-1),2) 설명을 참고하시면 됩니다!

import itertools
def solution(word):
    alphabet="AAAAAEEEEEIIIIIOOOOOUUUUU"
    answer = 0
    printList=[]
    for i in range(5):
        temp = list(itertools.permutations(alphabet, i+1)) #1
        tmp = map(lambda x: ''.join(list(x)), temp)#2
        lst = list(tmp)
        printList = printList + lst #3
    printList = list(set(printList)) #4
    printList.sort()  #5
    
    return printList.index(word)+1 #6