상세 컨텐츠

본문 제목

[프로그래머스 풀이]: Lv.0 / 배열 뒤집기

파이썬 코딩테스트

by Corn/sec 2025. 1. 29. 20:00

본문

작성: Corn/sec, ChatGPT, 편집: Corn/sec

[Lv.0 / 배열 뒤집기] 문제 설명

정답

# Sol 1

def solution(num_list):
    return num_list[::-1]

 

# Sol 2

def solution(num_list):
    num_list.reverse()
    return num_list

 


기억해야 할 것

리스트 뒤집기: [::-1] vs .reverse() 차이점

리스트를 뒤집는 방법에는 [::-1](슬라이싱)과 .reverse()(리스트 메서드) 두 가지가 있다.
두 방식은 같은 결과를 반환하지만, 작동 방식과 반환값, 메모리 사용 측면에서 차이가 있다.


 

1. [::-1] (슬라이싱)

동작 방식

  • [::-1]는 리스트를 새로운 리스트로 복사한 후 뒤집어서 반환한다.
  • 원본 리스트는 변경되지 않는다.

코드 예제

def reverse_using_slicing(num_list):
    return num_list[::-1]

original_list = [1, 2, 3, 4, 5]
reversed_list = reverse_using_slicing(original_list)

print(reversed_list)  # [5, 4, 3, 2, 1]
print(original_list)  # [1, 2, 3, 4, 5] (변경 없음)

장단점

원본 리스트 유지
간결한 코드
새로운 리스트를 생성하여 관리하므로 메모리 사용 증가


 

2. .reverse() (리스트 메서드)

동작 방식

  • .reverse()는 리스트를 in-place(제자리에서) 뒤집는다.
  • 원본 리스트가 직접 변경되며, 새로운 리스트를 반환하지 않는다.

코드 예제

def reverse_using_reverse_method(num_list):
    num_list.reverse()
    return num_list

original_list = [1, 2, 3, 4, 5]
reverse_using_reverse_method(original_list)

print(original_list)  # [5, 4, 3, 2, 1] (원본 변경됨)

장단점

새로운 리스트를 만들지 않아 메모리 효율적
대용량 리스트 처리 시 유리
원본 리스트가 변경됨
반환값이 None이므로 직접 반환하면 오류 발생 가능

.reverse()는 반환값이 없으므로, return num_list.reverse()를 하면 None이 반환된다.
따라서 .reverse()를 호출한 후 별도로 리스트를 확인해야 한다.


 

3. [::-1] vs .reverse() 비교

방식 원본 변경 여부 메모리 사용 사용 사례
[::-1] ❌ 변경 안 됨 🔺 증가 원본 유지 필요
.reverse() ✅ 변경됨 ✅ 효율적 원본 변경 가능

 

4. 어떤 방법을 선택해야 할까?

  • 원본 리스트를 유지하면서 새로운 리스트가 필요할 때 → [::-1]
  • 원본 리스트를 직접 수정해도 괜찮을 때 → .reverse()
  • 대용량 데이터를 다룰 때 메모리 사용을 최소화해야 할 때 → .reverse()

 

[::-1]은 가독성이 좋고 간편하지만, 새로운 리스트를 생성하기 때문에 메모리를 추가로 사용.
반면, .reverse()는 원본 리스트를 직접 수정하므로 메모리 사용량이 적지만, 원본 유지가 필요할 경우 부적절.
상황에 따라 적절한 방식을 선택하면 된다.

 

관련글 더보기