[Recursive Function] 리스트 뒤집기

HOONSSAC·2024년 1월 10일
1

Codeit Algorithm

목록 보기
8/15
post-thumbnail

코드잇 강의를 통해 알고리즘에 대해 공부하며 배운 내용들을 기록한 글입니다.


문제 설명

파라미터로 리스트 some_list를 받고, 뒤집힌 리스트를 리턴해 주는 재귀 함수 flip을 써라!
단, 반복문은 사용하면 안된다!

# 파라미터 some_list를 거꾸로 뒤집는 함수
def flip(some_list):
    # 여기에 코드를 작성하세요

# 테스트 코드
some_list = [1, 2, 3, 4, 5, 6, 7, 8, 9]
some_list = flip(some_list)
print(some_list)
[9, 8, 7, 6, 5, 4, 3, 2, 1]

나의 풀이

# 파라미터 some_list를 거꾸로 뒤집는 함수
def flip(some_list):
    if len(some_list) == 1:
        return some_list
    else:
        return some_list[-1:] + flip(some_list[:-1])
        
# 테스트 코드
some_list = [1, 2, 3, 4, 5, 6, 7, 8, 9]
some_list = flip(some_list)
print(some_list)

나는 배열의 슬라이싱을 이용해서 문제에 접근하였다.
우선 재귀 함수를 통해 슬라이싱을 계속 진행하다가 배열의 길이가 1이 되었을 때는 멈춰야 하기 때문에,
배열의 길이가 1일 때는 남은 배열을 그대로 반환해주도록 하였다!

def flip(some_list):
    if len(some_list) == 1:
        return some_list

이제 슬라이싱을 어떻게 하는지가 관건인데,
맨 끝의 인덱스만 남겨놓게 슬라이싱한 배열이랑, 처음부터 맨 끝 바로 앞의 인덱스까지만 슬라이싱한 배열을 더해주면 되겠다고 생각했다.
그리고 맨 끝 바로 앞까지 슬라이싱한 배열은 다시 flip함수를 호출하게 되어
그 배열도 맨 끝만 남겨두고 또 슬라이싱이 될 것이다.

    else:
        return some_list[-1:] + flip(some_list[:-1])

예를 들어, 첫 번째 flip함수를 호출한 경우
[9]flip([1, 2, 3, 4, 5, 6, 7, 8])을 합쳐서 리턴해 주면 된다.
flip([1, 2, 3, 4, 5, 6, 7, 8])은 다시 함수를 호출하여
[8]flip([1, 2, 3, 4, 5, 6, 7])으로 다시 나누어 질 것이다.

profile
훈싹의 개발여행

0개의 댓글