프로그래머스 Lv2 문제입니다. 실전에 대비하기 위해 60분 시간제한을 두고 풀었습니다.
문제
https://school.programmers.co.kr/learn/courses/30/lessons/84512
[나의 풀이]
⌛ 48분
from itertools import product
def solution(word):
words = ['A', 'E', 'I', 'O', 'U']
answer = 0
tmp = []
for i in range(1,6):
for x in product(words,repeat=i):
tmp.append("".join(x))
tmp.sort()
answer = tmp.index(word)+1
return answer
알파벳 모음 'A', 'E', 'I', 'O', 'U'만을 사용하여 만들 수 있는 길이 5 이하의 모든 단어의 순서가
'A', 'AA', 'AAA', 'AAAA', 'AAAAA', 'AAAAE', 'AAAAI', 'AAAAO', 'AAAAU', 'AAAE', 'AAAEA', 'AAAEE', 'AAAEI', 'AAAEO', 'AAAEU' 의 형태일 때, 입력된 단어의 번호를 구하는 문제입니다.
itertools의 product를 활용하여 만들 수 있는 모든 경우의 수를 구하고
이를 정렬한다면 문제에서 요구하는 형태의 순서로 만들었습니다.
이후 입력된 단어의 인덱스를 통해 답을 도출하였습니다.
[다른 사람의 풀이]
def solution(word):
word_list = []
words = 'AEIOU'
def dfs(cnt, w):
if cnt == 5:
return
for i in range(len(words)):
word_list.append(w + words[i])
dfs(cnt+1, w + words[i])
dfs(0,"")
return word_list.index(word)+1
solution("AE")
DFS를 활용한 풀이입니다. 최대 길이가 5인 단어로 DFS 재귀함수를 돌린다면,
'A'~'AAAAA'까지 진행된 뒤, 길이가 5인 'AAAAA'는 return되고 이후
'AAAA'부터 다시 문자열을 추가하며 'AAAAE'~'AAAAU'까지 진행됩니다.
이런 과정을 반복하면 문제에서 요구한 순서대로 return 되어 단어가 입력되었을 때, 인덱스를 활용하면 답을 구할 수 있는 풀이였습니다.
감사합니다.