파이썬 자료구조 시간복잡도 총정리! (feat. list, dict, set, heap, queue)

2025. 3. 18. 15:30자료구조

안녕하세요! 오늘은 파이썬에서 자주 쓰이는 자료구조들의 시간복잡도를 한눈에 정리해보려고 합니다.
어떤 자료구조를 선택해야 더 빠르고 효율적일지 고민된다면? 이 글을 참고하세요! 😊


📌 파이썬 자료구조 시간복잡도 한눈에 보기

자료구조마다 시간복잡도가 다르기 때문에, 어떤 상황에서 어떤 자료구조를 써야 할지 아는 것이 중요합니다.
아래 표는 탐색, 추가, 삭제 연산에 대한 시간복잡도를 정리한 것입니다.

자료구조탐색 (in)추가 (append, add)삭제 (remove, pop)
리스트 (list) O(n) O(1) (끝) / O(n) (중간) O(1) (끝) / O(n) (중간)
딕셔너리 (dict) O(1) O(1) O(1)
셋 (set) O(1) O(1) O(1)
덱 (deque) O(n) O(1) (양쪽) O(1) (양쪽)
힙 (heapq) O(n) O(log n) O(log n)

결론:

  • 탐색이 많다면? 👉 dict or set (O(1)이라 빠름)
  • 순서가 중요하다면? 👉 list or deque
  • FIFO 큐가 필요하다면? 👉 deque
  • 우선순위 처리(최솟값 유지)? 👉 heapq
  • 중복 제거? 👉 set

📌 1. 리스트 (list)

파이썬의 리스트는 동적 배열 (Dynamic Array) 구조로 되어 있습니다.
즉, 배열처럼 동작하지만 크기가 자동으로 확장되는 구조입니다.

🔹 리스트 연산 시간복잡도

연산시간복잡도설명
list.append(x) O(1) 맨 끝에 추가
list.insert(i, x) O(n) 중간에 삽입 시 밀어야 함
list.pop() O(1) 끝에서 제거
list.pop(i) O(n) 중간에서 제거
x in list O(n) 리스트에서 값 찾기
list.sort() O(n log n) TimSort 알고리즘 사용

📌 리스트는 언제 쓰면 좋을까?
✅ 순서가 중요한 데이터
✅ 인덱스를 이용해 빠르게 접근할 때
❌ 탐색/삭제가 많다면 비효율적! (O(n))


📌 2. 딕셔너리 (dict)

파이썬의 dict는 해시 테이블 기반으로 동작합니다.
즉, 키-값을 저장할 때 해시 함수를 사용하여 탐색, 삽입, 삭제 모두 O(1) 이라는 강력한 성능을 제공합니다!

🔹 딕셔너리 연산 시간복잡도

연산평균 시간복잡도설명
dict[key] = value O(1) 키-값 추가
dict[key] O(1) 키로 값 조회
del dict[key] O(1) 키-값 삭제
key in dict O(1) 키 존재 여부 확인

📌 딕셔너리는 언제 쓰면 좋을까?
✅ 키-값을 빠르게 조회해야 할 때
✅ 중복 없는 데이터를 저장해야 할 때
❌ 순서가 중요하다면 리스트를 고려 (단, Python 3.6+에서는 dict도 삽입 순서를 유지)


📌 3. 셋 (set)

파이썬의 set은 해시 테이블 기반의 집합 자료구조입니다.
리스트와 다르게 중복을 자동으로 제거하며, 탐색 속도가 O(1) 입니다.

🔹 셋 연산 시간복잡도

연산평균 시간복잡도설명
set.add(x) O(1) 값 추가
set.remove(x) O(1) 값 삭제
x in set O(1) 값 존재 여부 확인

📌 셋은 언제 쓰면 좋을까?
✅ 중복 없는 데이터를 저장해야 할 때
✅ 리스트보다 빠른 탐색이 필요할 때
❌ 순서가 필요하면 리스트 사용


📌 4. 덱 (collections.deque)

deque는 양쪽 끝에서 빠르게 삽입/삭제가 가능한 자료구조입니다.
리스트로 큐를 구현하면 pop(0)이 O(n)인데, deque.popleft()는 O(1)입니다.

🔹 덱 연산 시간복잡도

연산시간복잡도설명
deque.append(x) O(1) 뒤에 추가
deque.appendleft(x) O(1) 앞에 추가
deque.pop() O(1) 뒤에서 제거
deque.popleft() O(1) 앞에서 제거

📌 덱은 언제 쓰면 좋을까?
✅ 큐 또는 스택을 구현할 때
✅ 앞뒤로 빠르게 삽입/삭제가 필요할 때
❌ 임의의 인덱스에 접근해야 하면 리스트가 더 적합


📌 5. 힙 (heapq)

파이썬의 heapq는 최소 힙 (Min Heap) 기반으로 동작합니다.
우선순위 큐를 구현할 때 사용되며, 항상 가장 작은 값이 빠르게 검색 가능합니다.

🔹 힙 연산 시간복잡도

연산시간복잡도설명
heapq.heappush(heap, x) O(log n) 요소 추가
heapq.heappop(heap) O(log n) 최소값 제거
heapq.heapify(list) O(n) 리스트를 힙으로 변환

📌 힙은 언제 쓰면 좋을까?
✅ 최솟값을 빠르게 찾을 때
✅ 우선순위 큐가 필요할 때
❌ 일반적인 리스트 연산이 많다면 비효율적

'자료구조' 카테고리의 다른 글

[자료구조] B-Tree와 B+Tree 비교(탐색, 삽입, 삭제)  (0) 2025.03.22