Ch.2 배열과 문자열
배열의 메모리 구조 — 연속 메모리와 O(1) 접근
왜 배열은 인덱스로 바로 접근할 수 있을까?
사물함이 일렬로 나란히 있습니다. 3번 사물함을 찾으려면? 처음부터 세지 않아도 바로 갈 수 있죠.
리스트와 배열은 뭐가 다를까? 파이썬의 list는 진짜 배열일까?
연속 메모리 할당이 O(1) 접근의 비밀입니다. 메모리 주소 계산 한 번이면 끝!
핵심 개념
배열(Array)
같은 타입의 데이터를 연속 메모리에 저장하는 자료구조
인덱스(Index)
배열 내 요소의 위치를 나타내는 정수 (0부터 시작)
핵심 내용
사물함 100개가 일렬로 나란히 있다고 상상해보세요. 37번 사물함을 찾으러 갈 때 1번부터 셀 필요가 있나요?
배열도 마찬가지입니다. 연속된 메모리 공간에 데이터가 나란히 저장되기 때문에 위치를 계산 한 번으로 바로 접근합니다
배열의 i번째 요소 주소는 한 줄 공식으로 구할 수 있습니다
주소 계산 공식 address(i) = base_address + i × element_size 예) base = 1000, int(4byte), i = 3 address(3) = 1000 + 3 × 4 = 1012
덧셈과 곱셈 한 번씩이면 끝! 데이터가 1억 개여도 접근 시간은 동일합니다. 이것이 O(1) 시간복잡도입니다
배열과 연결 리스트를 시간복잡도로 비교해봅시다
면접 포인트: 배열은 읽기에 강하고, 연결 리스트는 삽입/삭제에 강합니다
Python의 list는 내부적으로 동적 배열(Dynamic Array)입니다
# 배열 기본 연산과 시간복잡도
arr = [10, 20, 30, 40, 50]
# O(1) — 인덱스 접근
print(arr[2]) # 30
# O(1) — 맨 뒤 추가
arr.append(60) # [10, 20, 30, 40, 50, 60]
# O(n) — 맨 앞 삽입 (전체 시프트)
arr.insert(0, 5) # [5, 10, 20, 30, 40, 50, 60]
# O(n) — 중간 삭제
arr.pop(3) # [5, 10, 20, 40, 50, 60]
# O(1) — 길이 확인
print(len(arr)) # 6배열에서 인덱스를 이용한 접근의 시간복잡도는?
Python list에서 맨 앞에 원소를 삽입하면 시간복잡도는?
배열의 크기가 클수록 인덱스 접근 시간도 오래 걸린다
Python의 list.append()는 평균적으로 O(1)이다
배열의 i번째 요소 주소 공식: address(i) = base_address + i × ____
배열의 i번째 요소 주소 공식: address(i) = base_address + i × ____
배열의 메모리 구조
핵심 용어
배열(Array)
같은 타입 데이터를 연속 메모리에 저장하는 자료구조
인덱스(Index)
배열 내 위치를 나타내는 정수 (0부터 시작)
Base Address
배열의 시작 메모리 주소
인덱스 접근
배열 O(1) / 연결 리스트 O(n)
맨 앞 삽입
배열 O(n) / 연결 리스트 O(1)
맨 뒤 삽입
배열 O(1)* / 연결 리스트 O(1)
중간 삭제
배열 O(n) / 연결 리스트 O(1)
정리 노트
배열 — 연속 메모리와 O(1) 접근
핵심 개념
- 배열
- 같은 타입 데이터를 연속 메모리에 저장
- 주소 공식
- address(i) = base + i × element_size → O(1)
- 동적 배열
- Python list, 용량 초과 시 2배 확장 (amortized O(1))
배열 vs 연결 리스트
- 인덱스 접근
- 배열 O(1) / 연결 리스트 O(n)
- 맨 앞 삽입
- 배열 O(n) / 연결 리스트 O(1)
- 메모리
- 배열: 연속 / 연결 리스트: 분산(포인터 추가 메모리)
면접 포인트: '배열은 읽기에 강하고, 연결 리스트는 삽입/삭제에 강하다'
시각 자료
핵심 정리
- 1배열은 연속 메모리에 저장 → 인덱스 접근 O(1)
- 2주소 계산: base + i × element_size
- 3Python list는 동적 배열 (amortized O(1) append)
- 4배열 = 읽기 특화 / 연결 리스트 = 삽입·삭제 특화
퀴즈와 인터랙션으로 더 깊이 학습하세요
play_circle인터랙티브 레슨 시작