์๋ฃ๊ตฌ์กฐ๋ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์ ์ฅํ๊ณ ๊ด๋ฆฌํ๋ ๋ฐฉ์ ๋๋ ๋ฐฉ๋ฒ์ด๋ค. ์ฝ๋ฉ ํ ์คํธ์์๋ ๊ฐ ์๋ฃ ๊ตฌ์กฐ์ ํน์ฑ์ ์ดํดํ๊ณ , ๋ฌธ์ ์ ๋ง๊ฒ ์ ํํ๋ ๊ฒ์ด ์ค์ํ๋ค...๋ ๋ง์ ์ง๋ถํ๊ณ ์ ๊น๋จน๊ฒ ์ ์ด๋ผ๋ ๋๋ค.
1. ๋ฆฌ์คํธ (List)
๋ฆฌ์คํธ๋ ์์๊ฐ ์๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์๋ฃ ๊ตฌ์กฐ๋ก, ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ์ฌ ๋น ๋ฅด๊ฒ ๋ฐ์ดํฐ์ ์ ๊ทผํ ์ ์๋ค. ํ์ด์ฌ์์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ์๋ฃ ๊ตฌ์กฐ์.
- ์๊ฐ ๋ณต์ก๋: ์ธ๋ฑ์ค ์ ๊ทผ O(1), ์ฝ์ /์ญ์ O(n) (์ค๊ฐ์ ์ฝ์ /์ญ์ ์)
- ์ฌ์ฉ ์ฌ๋ก: ์์ฐจ์ ์ธ ๋ฐ์ดํฐ ์ ์ฅ, ์ธ๋ฑ์ค ๊ธฐ๋ฐ ์ ๊ทผ, ๋ฆฌ์คํธ์ ๋์ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ ๊ฑฐํ ๋ ์ ์ฉ
# ๋ฆฌ์คํธ ์์ฑ
arr = [1, 2, 3]
# ๋ฆฌ์คํธ์ ์์ ์ถ๊ฐ
arr.append(4) # O(1)
# ์ธ๋ฑ์ค๋ฅผ ํตํ ์์ ์ ๊ทผ
print(arr[2]) # 3
# ๋ฆฌ์คํธ์์ ๋ง์ง๋ง ์์ ์ ๊ฑฐ
arr.pop() # O(1)
# ๋ฆฌ์คํธ์์ ์ค๊ฐ์ ์์ ์ฝ์
arr.insert(1, 5) # O(n)
# ๋ฆฌ์คํธ์์ ์์ ์ญ์
arr.remove(2) # O(n)
print(arr) # [1, 5, 3]
2. ๋์ ๋๋ฆฌ (Dictionary)
๋์ ๋๋ฆฌ๋ ํค-๊ฐ ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ํด์ ํ ์ด๋ธ ๊ธฐ๋ฐ ์๋ฃ ๊ตฌ์กฐ. ์ฃผ์ด์ง ํค๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ๊ฒ์ํ ์ ์์ด ๋งค์ฐ ํจ์จ์ ์ด๋ค.
- ์๊ฐ ๋ณต์ก๋: ํ๊ท O(1) (๊ฒ์, ์ฝ์ , ์ญ์ ๋ชจ๋)
- ์ฌ์ฉ ์ฌ๋ก: ํค ๊ธฐ๋ฐ ๊ฒ์์ด ํ์ํ ๋ฌธ์ , ๋น๋์ ๊ณ์ฐ, ๋ฐ์ดํฐ ๊ทธ๋ฃนํ ๋ฑ
# ๋์
๋๋ฆฌ ์์ฑ
d = {'a': 1, 'b': 2}
# ํค๋ฅผ ํตํด ๊ฐ์ ์ ๊ทผ
print(d['a']) # 1
# ์๋ก์ด ํค-๊ฐ ์ ์ถ๊ฐ
d['c'] = 3
# ํค ์ญ์
del d['b']
print(d) # {'a': 1, 'c': 3}
# ํค๊ฐ ์กด์ฌํ๋์ง ํ์ธ
if 'a' in d:
print("Key 'a' exists")
3. ํํ (Tuple)
ํํ์ ๋ถ๋ณ(immutable) ์๋ฃ ๊ตฌ์กฐ๋ก, ํ ๋ฒ ์์ฑ๋ ํ์๋ ๊ฐ์ ๋ณ๊ฒฝํ ์ ์๋ค. ํด์ ๊ฐ๋ฅํ ํน์ฑ์ ๊ฐ์ ธ ๋์ ๋๋ฆฌ์ ํค๋ก ์ฌ์ฉํ ์ ์๋ค.
- ์๊ฐ ๋ณต์ก๋: ์ธ๋ฑ์ค ์ ๊ทผ O(1)
- ์ฌ์ฉ ์ฌ๋ก: ๋ถ๋ณ ๋ฐ์ดํฐ ์ ์ฅ, ํด์ ํ ์ด๋ธ์ ํค๋ก ์ฌ์ฉ
# ํํ ์์ฑ
t = (1, 2, 3)
# ์ธ๋ฑ์ค๋ฅผ ํตํ ์์ ์ ๊ทผ
print(t[1]) # 2
# ํํ์ ๋ณ๊ฒฝ ๋ถ๊ฐ
# t[0] = 5 # ์ค๋ฅ ๋ฐ์
4. ์งํฉ (Set)
์งํฉ์ ์ค๋ณต์ ํ์ฉํ์ง ์์ผ๋ฉฐ, ์์๊ฐ ์๋ ์๋ฃ ๊ตฌ์กฐ์ด๋ค. ์งํฉ ์ฐ์ฐ(ํฉ์งํฉ, ๊ต์งํฉ ๋ฑ)์ ์ฌ์ฉํ ์ ์์ด ํธ๋ฆฌํ๋ค.
- ์๊ฐ ๋ณต์ก๋: ์ฝ์ /์ญ์ /๊ฒ์ O(1)
- ์ฌ์ฉ ์ฌ๋ก: ์ค๋ณต ์ ๊ฑฐ, ์งํฉ ์ฐ์ฐ, ํน์ ์์์ ์กด์ฌ ์ฌ๋ถ ํ์ธ
# ์งํฉ ์์ฑ
s = {1, 2, 3}
# ์์ ์ถ๊ฐ
s.add(4)
# ์์ ์ญ์
s.remove(2)
# ์ค๋ณต๋ ์์๋ ์๋์ผ๋ก ์ ๊ฑฐ๋จ
s.add(1)
# ์งํฉ ๋ด์ ํน์ ์์๊ฐ ์๋์ง ํ์ธ
if 3 in s:
print("3 is in the set")
print(s) # {1, 3, 4}
5. ์คํ (Stack)
์คํ์ ํ์ ์ ์ถ(LIFO) ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ์๋ฃ ๊ตฌ์กฐ์ด๋ค. ๊ฐ์ฅ ๋ง์ง๋ง์ ๋ค์ด์จ ๋ฐ์ดํฐ๋ฅผ ๋จผ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ผ๋ก, ์ฌ๊ท์ ๋ฌธ์ ํด๊ฒฐ์ด๋ DFS์์ ์ฌ์ฉ๋๋ค.
- ์๊ฐ ๋ณต์ก๋: ์ฝ์ /์ญ์ O(1)
- ์ฌ์ฉ ์ฌ๋ก: ๊ดํธ ์ง ๋ง์ถ๊ธฐ, ํ์ ํ๊ธฐ์ ๊ณ์ฐ, ๊น์ด ์ฐ์ ํ์(DFS)
# ์คํ ๊ตฌํ
stack = []
# ์คํ์ ์์ ์ถ๊ฐ
stack.append(1) # O(1)
stack.append(2)
# ์คํ์์ ์์ ์ ๊ฑฐ
print(stack.pop()) # 2
print(stack.pop()) # 1
6. ํ (Queue)
ํ๋ ์ ์ ์ ์ถ(FIFO) ๋ฐฉ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ์๋ฃ ๊ตฌ์กฐ๋ก, ๋จผ์ ๋ค์ด์จ ๋ฐ์ดํฐ๋ฅผ ๋จผ์ ์ฒ๋ฆฌํ๋ค. ์ฃผ๋ก BFS๋ ์์ ์ค์ผ์ค๋ง์์ ์ฌ์ฉ๋๋ค.
- ์๊ฐ ๋ณต์ก๋: ์ฝ์ /์ญ์ O(1)
- ์ฌ์ฉ ์ฌ๋ก: ๋๋น ์ฐ์ ํ์(BFS), ์์ ์ค์ผ์ค๋ง, ํ๋ก์ธ์ค ๊ด๋ฆฌ
from collections import deque
# ํ ๊ตฌํ
queue = deque()
# ํ์ ์์ ์ถ๊ฐ
queue.append(1) # O(1)
queue.append(2)
# ํ์์ ์์ ์ ๊ฑฐ
print(queue.popleft()) # 1
print(queue.popleft()) # 2
7. ํ (Heap)
ํ์ ์ฐ์ ์์ ํ๋ฅผ ๊ตฌํํ๋ ์๋ฃ ๊ตฌ์กฐ์ด๋ค. ์ต์ ํ(Min Heap) ๋๋ ์ต๋ ํ(Max Heap)์ผ๋ก ๊ตฌํ๋ ์ ์๋๋ฐ, ๋ถ๋ชจ ๋ ธ๋๊ฐ ์์ ๋ ธ๋๋ณด๋ค ์ฐ์ ์์๊ฐ ๋๋ค.
- ์๊ฐ ๋ณต์ก๋: ์ฝ์ /์ญ์ O(log n)
- ์ฌ์ฉ ์ฌ๋ก: ์ฐ์ ์์ ์ฒ๋ฆฌ, ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ, ํ ์ ๋ ฌ
import heapq
# ์ต์ ํ ๊ตฌํ
heap = []
# ํ์ ์์ ์ถ๊ฐ
heapq.heappush(heap, 3) # O(log n)
heapq.heappush(heap, 1)
heapq.heappush(heap, 2)
# ํ์์ ๊ฐ์ฅ ์์ ๊ฐ ๊บผ๋ด๊ธฐ
print(heapq.heappop(heap)) # 1
print(heapq.heappop(heap)) # 2
'๐ป Programming > ์ฝ๋ฉ ํ ์คํธ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ฝ๋ฉ ํ ์คํธ๋ฅผ ์ํ '์๊ณ ๋ฆฌ์ฆ' (0) | 2025.01.16 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค] 'ํ์ด์ฌ์ ํ์ด์ฌ๋ต๊ฒ' ๊ฐ์ ์ ๋ฆฌ (0) | 2021.08.03 |