문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/84512
풀이
이 문제는 단순히 수학적으로 개수를 계산해 푸는 방법이나 등비수열의 합을 이용해 해당 자리에 어떤 모음이 위치하는지에 맞춰 풀이할 수도 있으나 쉽게 생각하기 어려운 방법이었다.
그래서 재귀를 활용하여 실제로 A, E, I, O, U를 사용한 모음사전을 생성하고 이를 전체적으로 순회하면서 일치하는 단어가 나타나는 그 인덱스 + 1을 반환하는 방식으로 문제를 풀이하였다. 물론 이 방법은 앞서 말한 수학적으로 개수를 계산하는 방식이나 등비수열의 합을 사용한 방식보다 느리지만 누구나 쉽게 이해할 수 있는 방법이라고 생각한다.
재귀는 항상 종료 조건과 반복되며 수행할 연산에 대한 정의가 필요하다. 현재 문제에서 사전에 등록될 수 있는 단어의 최대 길이를 5라고 지정하고 있기에 사전을 채워나갈 재귀 함수의 종료 조건은 당연히 단어의 길이가 6이 되는 것이다.
재귀함수 내에서 수행되어야 할 연산은 빈 문자열 ""부터 모음들을 하나씩 순회하면 더해가는 것이다.
def solution(word):
_list = [] # 모음사전
fill_list(_list, "") # 재귀 함수 실행
for i, string in enumerate(_list): # 모음사전을 처음부터 순회하며
if word == string: # 일치하는 단어가 나오면
return i + 1 # 몇번째 단어인지 반환
def fill_list(_list, string):
if len(string) == 6: # 단어의 길이가 6이면
return # 종료
if string != "": # 빈 문자열이 아니라면 유효한 단어이므로
_list.append(string) # 모음사전에 추가
for ch in ['A', 'E', 'I', 'O', 'U']: # 모음 종류별로 하나씩
fill_list(_list, "".join([string, ch])) # 문자열 맨 뒤에 추가하며 재귀 함수 호출
'알고리즘 > 알고리즘 문제 풀이' 카테고리의 다른 글
[프로그래머스 Lv.2] 카펫 (Python) (0) | 2024.06.02 |
---|---|
[프로그래머스 Lv.4] 호텔 방 배정 (Python) (0) | 2024.05.31 |
[프로그래머스 Lv.2] 하노이의 탑 (Python) (0) | 2024.05.22 |
[프로그래머스 Lv.2] 이진 변환 반복하기 (Python) (0) | 2024.05.18 |
[프로그래머스 Lv.2] 문자열 압축 (Python) (0) | 2024.05.17 |