DOing
[์๋ฃ๊ตฌ์กฐ] ์คํ, ํ, ๋ฐํ ๋ณธ๋ฌธ
๐ก Stack(์คํ)
: ์คํ์ ํ์ชฝ ๋์ผ๋ก๋ง ์๋ฃ๋ฅผ ๋ฃ๊ณ ๋บ ์ ์๋ ์๋ฃ ๊ตฌ์กฐ์ด๋ค.
: LIFO(Last In, First Out) ๊ตฌ์กฐ์ด๋ค.
๐ก ์คํ์ ํน์ง
[ ์ฅ์ ]
: ๊ตฌ์กฐ๊ฐ ๋จ์ํด์ ๊ตฌํ์ด ์ฝ๋ค.
: ๋ฐ์ดํฐ ์ ์ฅ/์ฝ๊ธฐ ์๋๊ฐ ๋น ๋ฅด๋ค.
[ ๋จ์ ]
1) ๋ฐ์ดํฐ ์ต๋ ๊ฐฏ์๋ฅผ ๋ฏธ๋ฆฌ ์ ํด์ผํ๋ค.
-> ๋ฐ์ดํฐ๋ฅผ ๋ฌดํ์ ์ผ๋ก ์์ ์๋ ์๋ค. ์๊ธฐ์ํด์๋ ๋ฏธ๋ฆฌ ์ต๋ ๊ณต๊ฐ์ ํ๋ณดํด์ผํ๋ค.
-> ํ์ด์ฌ์ ๊ฒฝ์ฐ ์ฌ๊ทํจ์๋ 1000๋ฒ๊น์ง๋ง ํ์ฉํ๋ค. 1000๊ฐ๋งํผ์ ๊ณต๊ฐ ํ๋ณดํ๋จ ์๋ฆฌ๊ธฐ๋ ํ๋ค.
2) ์ ์ฅ ๊ณต๊ฐ์ ๋ญ๋น๊ฐ ๋ฐ์ํ ์ ์๋ค.
-> ์ต๋ ๊ฐฏ์๋ฅผ ๋ฏธ๋ฆฌ ์ ํด์ผํ๊ธฐ๋๋ฌธ์ด๋ค.
[ ์คํ ํ์ฉ ]
: ํ๋ก์ธ์ค ์คํ ๊ตฌ์กฐ
ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ ์ํ๋ฅผ ํ๋ก์ธ์ค๋ผ๊ณ ํ๋๋ฐ ํ๋ก์ธ์ค์์์ ํจ์๊ฐ ํธ์ถ๋๋ ํํ๋ค.
ํ๋ก์ธ์ค ์คํ๊ตฌ์กฐ์ recursiveํจ์๊ฐ ํธ์ถ๋๊ฒ์ ์ ์ฅํ๋ค.
ํจ์์์ ํจ์๊ฐ ํธ์ถ๋๋ฉด ์คํ๊ณผ ๊ฐ์ ๊ตฌ์กฐ๋ก ์๋จ์ ์์ธ๋ค. ํจ์๊ฐ ์๋ก ์ฐจ๊ณก์ฐจ๊ณก ์์ด๊ณ ๋งจ์์ ํจ์๋ถํฐ ์ญ์ ๋๋ค. ๋งจ์์ ํจ์๊ฐ ์ญ์ ๋๋ฉด(๋๋๋ฉด) ๊ทธ ํจ์๋ฅผ ํธ์ถํ ๋ค์ ํจ์๊ฐ ๋ถ๋ ค์ง๋ ํํ๋ก ํ๋ก์ธ์ค๊ฐ ๋์ํ๋ค. ์ด ํํ๋ฅผ ๊ตฌํํ๋๋ฐ ๊ฐ์ฅ ํจ๊ณผ์ ์ธ ์๋ฃ๊ตฌ์กฐ๊ฐ ์คํ์ด๋ค.
def recursive(data):
if data<0:
print('ended')
else :
print('start', data)
recursive(data-1)
print("returned", data)
recursive(4)
๐ก ์คํ ๊ตฌํํ๊ธฐ
stack_list = list()
def push(data):
stack_list.append(data)
def pop():
data = stack_list[-1]
del stack_list[-1] # ๋ง์ง๋ง๋ฐ์ดํฐ=๊ฐ์ฅ๋์ค์ ๋ค์ด๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ญ์
return data
for index in range(10):
push(index)
print(pop()) #9
print(stack_list)
๐ก ํ์ด์ฌ์์ ์คํ ์ฌ์ฉ
data_stack = list()
data_stack.append(1)
data_stack.append(2)
print(data_stack) #[1,2]
print(data_stack.pop()) #2
๐ก Queue(ํ)
: ํ๋ ํ์ชฝ ๋์ผ๋ก ์๋ฃ๋ฅผ ๋ฃ๊ณ , ๋ฐ๋์ชฝ์์๋ ์๋ฃ๋ฅผ ๋บ ์ ์๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
: FIFO(First In, First Out) ๊ตฌ์กฐ์ด๋ค.
[ ํ์ ํ์ฉ ]
- ๋ค์ด์จ ์์๋๋ก ์ผ์ ์ฒ๋ฆฌํด์ผํ ๋ ๋ง์ด ์ฌ์ฉ๋๋ค.
- ex) ์ด์์ฒด์ ์ ๋ฉํฐํ์คํน์ ์ํ ํ๋ก์ธ์ค ์ค์ผ์ค๋ง ๊ตฌํ
๐ก ํ ๊ตฌํํ๊ธฐ
queue_list = list()
def enqueue(data):
queue_list.append(data)
def dequeue():
data = queue_list[0] # ๋งจ ์ ๋ฐ์ดํฐ ๊บผ๋ด๊ธฐ
del queue_list[0] # ๋งจ ์ ๋ฐ์ดํฐ ์ญ์
return data
for index in range(10):
enqueue(index)
print(queue_list)
dequeue() # 0 ์ญ์
dequeue() # 1 ์ญ์
print(queue_list)
๐ก ํ์ด์ฌ์์ ํ ์ฌ์ฉ
ํ์ด์ฌ์ ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ง์ํ๋ค. ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์๋ ๋ค์๊ณผ ๊ฐ์ ๋ณํ๋ ํ๋ ์ ๊ณตํ๊ณ ์๋ค.
1. Queue() : ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ํ ์๋ฃ๊ตฌ์กฐ
2. LifoQueue() : Last in, First Out(=์คํ๊ตฌ์กฐ)
3. PriorityQueue() : ๋ฐ์ดํฐ๋ง๋ค ์ฐ์ ์์๋ฅผ ๋ฃ์ด์ ์ฐ์ ์์๋๋ก ์ถ๋ ฅ
import queue
# ์ผ๋ฐ์ ์ธ ํ
data_queue = queue.Queue()
data_queue.put(abc)
data_queue.put(123)
data_queue.qsize() #2
data_queue.get() #abc
data_queue.get() #123
# LIFOํ
data_lifo = queue.LifoQueue()
data_lifo.put(abc)
data_lifo.put(123)
data_lifo.get() #123
# priorityQueue
data_priority = queue.PriorityQueue()
data_priority((10,"korea")) #๋ฐ์ดํฐ๊ฐ ํํ๋ก ๋ค์ด๊ฐ๋ค.
data_priority((15,"china"))
data_priority((5,1))
data_priority.size() #3
data_priority.get() #1
data_priority.get() #korea
๐ก Deque(Double Ended Queue)
: ์ ๋์์ ์ฝ์ ๊ณผ ์ญ์ ๊ฐ ๊ฐ๋ฅํ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
: ์คํ๊ณผ ํ์ ์ฑ์ง์ ๋ชจ๋ ๊ฐ์ง๊ณ ์๋ค.
[ ๋ฐํ ์ฌ์ฉํ๊ธฐ ]
from collections import deque
deque = deque()
deque.append(2)
deque.append(3)
deque.appendleft(1)
print(deque)
print(deque.pop())
print(deque.popleft())
์ถ์ฒ
์คํ๋ฅดํ ์ฝ๋ฉํด๋ฝ ์๊ณ ๋ฆฌ์ฆ ๊ฐ์
ํจ์คํธ์บ ํผ์ค ์๊ณ ๋ฆฌ์ฆ ๊ฐ์
'์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๋ฃ๊ตฌ์กฐ] ์ด์ง ํ์ ํธ๋ฆฌ with Python (0) | 2021.06.21 |
---|---|
[์๋ฃ๊ตฌ์กฐ] ๊ทธ๋ํ (0) | 2021.06.15 |
[์๊ณ ๋ฆฌ์ฆ] Disjoint Sets(์๋ก์ ์งํฉ) (0) | 2021.05.31 |
[์๊ณ ๋ฆฌ์ฆ] ํ๋ก์ด๋ ์์ with Python (0) | 2021.05.23 |
[์๊ณ ๋ฆฌ์ฆ] ๋ค์ต์คํธ๋ผ ์ต๋จ๊ฒฝ๋ก with Python (0) | 2021.05.23 |