def func(lst):
  for i in range(len(lst) //2):
    lst[i], lst[-i-1] = lst[-i-1], lst[i]
 
lst = [1,2,3,4,5,6] 
func(lst)
print(sum(lst[::2]) - sum(lst[1::2]))
코드가 하는 일 한 줄 요약
- func → 리스트를 제자리(in-place)에서 뒤집음
 - 마지막 한 줄 → 짝수 인덱스 합 – 홀수 인덱스 합 출력함
 
range 사용법 핵심 정리
- 형태 3가지 있음
- range(stop) : 0부터 stop-1 까지
 - range(start, stop) : start부터 stop-1 까지
 - range(start, stop, step) : step 간격으로 진행 (음수 가능)
 
 - len(lst) // 2 의미
- 리스트 길이의 절반을 내림 한 값
 - 뒤집을 때 앞쪽 원소와 뒤쪽 원소를 한 쌍으로 교환하므로 절반만 돌면 충분함
 - 길이가 짝수면 정확히 절반, 홀수면 가운데 원소는 스킵됨 (교환 필요 없음)
 
 
예시
- lst = [1,2,3,4,5,6] 길이 6 → len(lst)//2 == 3 → range(3) ⇒ i = 0, 1, 2 순회함
 
음수 인덱싱 포인트
- -1 → 맨 마지막 원소
 - -i-1 → 뒤에서 i만큼 떨어진 대칭 위치
- i=0 → -1 (끝), i=1 → -2, i=2 → -3 …
 
 
스왑이 실제로 어떻게 일어나는지
초기: lst = [1,2,3,4,5,6]
- i = 0
- lst[0] ↔ lst[-1] (1 ↔ 6) → [6,2,3,4,5,1]
 
 - i = 1
- lst[1] ↔ lst[-2] (2 ↔ 5) → [6,5,3,4,2,1]
 
 - i = 2
- lst[2] ↔ lst[-3] (3 ↔ 4) → [6,5,4,3,2,1]
 
 
결과: 완전 뒤집힘. 추가 메모리 안 씀(제자리 교환)임
슬라이싱([start:stop:step]) 완전 요약
- 형식: 시작:끝:간격
- start 생략 → 처음부터
 - stop 생략 → 끝까지
 - step 생략 → 1칸씩
 
 - 자주 쓰는 패턴
- lst[::2] : 0,2,4… 인덱스(짝수 인덱스)만 뽑음
 - lst[1::2] : 1,3,5… 인덱스(홀수 인덱스)만 뽑음
 - lst[::-1] : 리스트 뒤집은 새 리스트 반환 (원본 안 바뀜)
 - lst[:3] : 앞에서 3개
 - lst[3:] : 3번 인덱스부터 끝까지
 
 - 주의
- 슬라이싱은 새 리스트를 생성함 → 메모리 복사 발생
 - step=0 불가 (에러 남)
 
 
마지막 한 줄의 계산 해설
뒤집은 후 리스트: [6,5,4,3,2,1]
- lst[::2] → 인덱스 0,2,4 → [6,4,2] → 합 12
 - lst[1::2] → 인덱스 1,3,5 → [5,3,1] → 합 9
 - 차이: 12 - 9 = 3 → 출력은 3
 
흥미로운 성질 하나
- 길이가 짝수인 리스트를 뒤집으면
sum(짝수인덱스) - sum(홀수인덱스) 값이 부호만 반대로 바뀜- 원본 [1,2,3,4,5,6] 기준
- 짝수합 1+3+5=9, 홀수합 2+4+6=12 → 차이 -3
 
 - 뒤집은 뒤 [6,5,4,3,2,1] → 차이 +3
 - 즉 D' = -D 성립함(짝수 길이일 때)
 
 - 원본 [1,2,3,4,5,6] 기준
 
한줄평
range 랑 슬라이싱 사용법 잘 기억하귀
출처
https://chobopark.tistory.com/495
'정보처리기사' 카테고리의 다른 글
| 2024년 정보처리기사 실기 3회 10번 문제 공부 및 풀이 (0) | 2025.10.02 | 
|---|---|
| 2024년 정보처리기사 실기 3회 7번 문제 공부 및 풀이 (0) | 2025.09.27 | 
| 2024년 정보처리기사 실기 2회 18번 문제 공부 및 풀이 (0) | 2025.09.25 | 
| 2024년 정보처리기사 실기 2회 17번 문제 공부 및 풀이 (0) | 2025.09.25 | 
| 2024년 정보처리기사 실기 2회 15번 문제 공부 및 풀이 (0) | 2025.09.24 |