리스트를 뒤집는 것은 그냥 for문을 돌리면서
some_list[i], some_list[-(1+i)] = some_list[-(1+i)], some_list[i] 이런식으로 하면 될탠데
이 문제는 재귀적으로 접근해야 하므로 다른 방식이 필요했다.
문제를 큰 문제와 작은 문제로 나누어서 생각해보았는데
하나의 큰 리스트가 있다면, 이를 뒤집기 위해서는 맨 앞 혹은 맨 뒤의 값을 조정해야한다.
근데, 맨 앞을 뒤로 보내는 것보다, 맨 뒤를 앞으로 가져오는게 더 조정하기 쉬울 것 같아서 맨 뒤의 값과 나머지 리스트로 나누는 방식을 선택했다.
- 리스트를 recursive case와 base case로 나누기
- base case => 길이가 1이고, 파라미터 리스트의 -1 인덱스 값
- recursive case => list[:-1]
- 만약 recursive case의 길이가 1이라는 것은, 원본 리스트의 0번째 값이므로 멈추면 된다.
def flip(some_list):
if len(some_list) <= 1:
return some_list
return some_list[-1:] + flip(some_list[:-1])
'알고리즘 > 문제 풀이' 카테고리의 다른 글
2021-10-09 하노이탑 반영환 (0) | 2021.10.11 |
---|---|
2021-10-07 이진탐색 재귀 반영환 (0) | 2021.10.11 |
2021-10-05 각 자릿수의 합 반영환 (0) | 2021.10.11 |
2021-10-05 삼각수 반영환 (0) | 2021.10.11 |
2021-10-05 피보나치수열 반영환 (0) | 2021.10.11 |