나의 풀이
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) 의 결과값을 문자열로 바꿔 리스트에 저장하고,
리스트를 정렬한다.
'알고리즘 > 완전탐색' 카테고리의 다른 글
[swea] 1244번: 최대상금 - 파이썬(python) (0) | 2022.11.14 |
---|---|
전력망을 둘로 나누기 - 파이썬(python) (0) | 2022.09.07 |
[프로그래머스] 피로도 - 파이썬(python) (0) | 2022.09.07 |
[프로그래머스] 소수 찾기 - 파이썬(python) (0) | 2022.09.07 |
[프로그래머스] 모의고사 - 파이썬(python) (0) | 2022.09.06 |
댓글