알고리즘/완전탐색

[프로그래머스] 모음사전 - 파이썬(python)

아뵹젼 2022. 9. 7.

 

 

나의 풀이

def dfs(x, dictionary, alpha):
    dictionary.append(x)
    for i in alpha : 
        if len(x) != len(alpha) :
            dfs(x+i, dictionary, alpha)
        else :
            x[:-1]
            

def solution(word):
    alpha = ['A','E','I','O','U']
    dictionary = []
    for i in range(len(alpha)) :
        dfs(alpha[i], dictionary, alpha)
    
    return dictionary.index(word) + 1

 

  • DFS 로 풀이한 문제이다.
  • 먼저 dictionary 에 현재 나의 문자를 추가한다.
  • 그리고, alpha 리스트를 반복문으로 돌면서, 문자열 x의 길이가 5 보다 작다면, 문자열에 alpha[i] 를 붙혀서 다시 DFS 를 실행한다.

ex) x = "A" 일때

  • 길이가 5보다 작으므로 i=0 일 때 x=AA 로 다시 DFS 실행,
  • AA -> AAA -> AAAA -> AAAAA
  • AAAAA 는 길이가 5이므로, AAAA 로 다시 자른다.
  • AAAA 에서 i=1 이므로, E를 붙힌 AAAAE 로 다시 DFS 실행 
  • AAAAE 는 길이가 5이므로, AAAA 로 다시 자르고, i=2 에서 I를 붙힌 AAAAI로 다시 DFS 실행
  • .....
  • 길이가 4일 때 i=0~4 까지의 알파벳을 다시 붙히고, 돌아와서 길이가 3일 때 i=0~4 까지의 알파벳을 다시 붙히고,,,
  • 이러한 과정을 계속 반복한다.

 

다른 풀이

itertools 모듈의 product, repeat 을 사용한 풀이이다.

product 연산의 결과는 중첩된 for loop에 해당하는 데카르트의 곱이다.

product('ABCD', repeat=2) AA AB AC AD BA BB BC BD CA CB CC CD DA DB DC DD

 

from itertools import product

def solution(word):
    x = [''.join(j) for i in range(5) for j in product("AEIOU", repeat=i+1)]
    x.sort()
    return x.index(word) + 1

 

i = 0~4 까지 돌면서, product("AEIOU", repeat=i+1) 의 결과값을 문자열로 바꿔 리스트에 저장하고,

리스트를 정렬한다.

댓글