ํด๋น ๊ธ์ ํ๋ก๊ทธ๋๋จธ์ค [๊ณ ๋์ ์๊ณ ๋ฆฌ์ฆ kit. ์คํ/ํ - ๊ธฐ๋ฅ๊ฐ๋ฐ] ๋ฌธ์ ๋ฅผ ํ๋ฉด์ ์คํ๊ณผ ํ ๊ฐ๋ ์ ๋ํด ์ ๋ฆฝํ ํ์๋ฅผ ๋๋ผ๊ณ ์ ๋ฆฌํ ๊ธ์ ๋๋ค!! ํด๋น ๋ฌธ์ ๊ฐ ๊ถ๊ธํ์๋ฉด ์๋ ์ฌ์ดํธ๋ฅผ ๋ฐฉ๋ฌธํด์ฃผ์ธ์~!!
ํ๋ก๊ทธ๋๋จธ์ค
์ฝ๋ ์ค์ฌ์ ๊ฐ๋ฐ์ ์ฑ์ฉ. ์คํ ๊ธฐ๋ฐ์ ํฌ์ง์ ๋งค์นญ. ํ๋ก๊ทธ๋๋จธ์ค์ ๊ฐ๋ฐ์ ๋ง์ถคํ ํ๋กํ์ ๋ฑ๋กํ๊ณ , ๋์ ๊ธฐ์ ๊ถํฉ์ด ์ ๋ง๋ ๊ธฐ์ ๋ค์ ๋งค์นญ ๋ฐ์ผ์ธ์.
programmers.co.kr
๐ ์คํ(Stack)??
์คํ์ "์๋ค"๋ผ๋ ์๋ฏธ๋ฅผ ๊ฐ์ง ๋จ์ด๋ก, ์๊ณ ๋ฆฌ์ฆ์์๋ ์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด '๋ฐ์ดํฐ๋ฅผ ์ฐจ๊ณก์ฐจ๊ณก ์์ ๊ตฌ์กฐ'๋ฅผ ์๋ฏธํ๋ค.
์คํ์ ์๋ฃ๊ตฌ์กฐ์์ ๋ฉ์ธ ์ฅ์ผ๋ก ๋ค๋ค์ผ ํ ์ ๋๋ก ์ค์ํ๊ณ ์์ฃผ ์ฐ์ด๋ ๊ฐ๋ ์ด๋ค. ๋ฐ์ดํฐ๊ฐ ์์ฐจ์ ์ผ๋ก ์์ผ ๋ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ด๋ผ๋์ง, ์ ๊ทผ ๋ฐฉ์์ด๋ผ๋์ง, ์ญ์ ํ๋ ๋ฐฉ์์ด๋ผ๋์ง, ๋ค๋ฅธ ์๋ฃ๊ตฌ์กฐ(ex. ํ)์๋ ๋ค์ ๋ค๋ฅธ ํน์ง์ ์ง๋๊ณ ์๋ค.
1๏ธโฃ ์คํ์ ํน์ง
์คํ์ 'ํ์ ์ ์ถ(LIFO : Last In First Out)'์ ์๋ฆฌ๋ฅผ ๊ฐ๊ณ ์ฝ์ ๊ณผ ์ญ์ ๋ฅผ ์ํํ๋ ์๋ฃ๊ตฌ์กฐ์ ์ฃผ์ ๊ฐ๋ ์ด๋ค. ์ฌ๊ธฐ์ ์ฝ์ ์ Push, ์ญ์ ๋ Pop ์ด๋ผ ํ๋ค.
๋ณดํต ์ธํฐ๋ท ๋ธ๋ผ์ฐ์ ์ ์์๋ฅผ ํตํด ๋ง์ด ์ค๋ช ํ๋๋ฐ, '๋ค๋ก๊ฐ๊ธฐ' ๊ธฐ๋ฅ์ด ๋ํ์ ์ธ ์์๋ค. ์๋ก์ด ์ฌ์ดํธ๋ฅผ ๋ฐฉ๋ฌธํ ๋๋ง๋ค ํด๋น ์ฌ์ดํธ์ ์ฃผ์๋ฅผ ์คํ์ Pushํ๊ณ , ์ ์ ๊ฐ ๋ค๋ก๊ฐ๊ธฐ๋ฅผ ๋๋ฅด๋ฉด ์คํ์ Pop ๊ธฐ๋ฅ์ ํตํด ์ด์ ์ฌ์ดํธ๋ก ๋์๊ฐ๋ ์์ด๋ค.
Ex) ํฐ์คํ ๋ฆฌ ๋ฉ์ธ ํ์ด์ง ๐ (Push) ๐ 'JOON__HK's ๊ธฐํ/๊ฐ๋ฐ STORY' ๐ (POP) ๐ 'ํฐ์คํ ๋ฆฌ ๋ฉ์ธ ํ์ด์ง'
Ex) ๋งํธ์์ ์ฐ์ ๋ฅผ ๊ณ ๋ฅผ ๋. ์ ํต๊ธฐํ์ด ๊ธด ์ฐ์ ('๋งจ ๋ค์ ์๋ ๋ ์')๋ฅผ ๊บผ๋ด๊ฐ๋ ๊ฒ์ฒ๋ผ... ("๋๋ง ๊ทธ๋ฐ๊ฐ?")
2๏ธโฃ ํ์ด์ฌ ์คํ ๊ตฌํ ํจ์ (๋ฆฌ์คํธ)
- append() : ๋ฆฌ์คํธ์ ๊ฐ์ฅ ๋ค์ชฝ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํ๋ ํจ์
- pop() : ๋ฆฌ์คํธ์ ๋ง์ง๋ง ๋ฐ์ดํฐ๋ฅผ ๊บผ๋ด๋ (+ ์๋ ๋ฆฌ์คํธ์์ ์ญ์ ) ํจ์
- is_empty() : ๋ฆฌ์คํธ๊ฐ ๋น ์คํ์ธ์ง ํ์ธํ๋ ํจ์
- peek() : ๋ฆฌ์คํธ์ ๋ง์ง๋ง ๋ฐ์ดํฐ๊ฐ ๋ฌด์์ธ์ง ํ์ธํ๋ (+ pop๊ณผ ๋ฌ๋ฆฌ ์ญ์ ๋ x) ํจ์
Ex) ๋จ์ด๋ฅผ ์ญ์์ผ๋ก ์ถ๋ ฅํ ๋ (*์คํ ํด๋์ค ํ์ฉ)
def word_reverse(word): # word = "aircraft"
ex_s = Stack()
ret_str = ""
for w in word:
ex_s.push(w)
while not ex_s.is_empty():
ret_answer += ex_s.pop()
return ret_answer # ret_answer = "tfarcria"
#๏ธโฃ ๋ณดํต ์๋ฃ๊ตฌ์กฐ(Data Structure)๋ฅผ ๊ณต๋ถํ ๋ ํ์ด์ฌ๋ณด๋ค๋ C++์ ๋ง์ด๋ค ์ธ๊ธํ๊ธฐ์, ์คํ์ ๊ตฌํํ๊ธฐ ์ํ C++์ ํจ์๋ ์ธ๊ธํ๊ณ ๋์ด๊ฐ๊ฒ ๋ค.
- push(๋ณ์) : ๋ณ์๋ฅผ ์คํ์ ๋งจ ์์ ์ฝ์
- pop() : ์คํ์ ๋งจ ์์ ์๋ ํญ๋ชฉ์ ์ญ์
- empty() : ์คํ์ด ๋น์ด์๋์ง ํ์ธ ํ boolean ํ์ ์ ๊ฐ์ ๋ฐํ
- size() : ์คํ์ ๋ค์ด์๋ ์์์ ๊ฐ์๋ฅผ ๋ฐํ
- top() : ์คํ์ ๋งจ ์์ ์๋ ํญ๋ชฉ์ ๋ฐํ
์คํ์ ๊ตฌํํ๊ธฐ ๊ฐ๋จํ ์ปจํ ์ด๋ ๊ตฌ์กฐ์ด๊ธฐ ๋๋ฌธ์, ์์๊ฐ ๋ณ๋ก ์ค์ํ์ง ์์ ๊ฒฝ์ฐ์ ํ์ฉํ๊ธฐ ์ข๋ค. ํนํ ์ค์ฒฉ๋ ๊ตฌ์กฐ๋ฅผ ์ฒ๋ฆฌํ ๋๋ผ๋์ง, ์ฌ๊ทํจ์๋ฅผ ๊ตฌํํ ๋๋ผ๋์ง, DFS ๋ฑ.
๐ ํ(Queue)??
ํํ ํธ์์ ์์ ์๋ฐ๋ฅผ ํด๋ดค๊ฑฐ๋, ์๋ฃ์, ์ํ ์ง์ด์ ๊ฒฝํ์ด ์๋ ์ฌ๋์ด๋ผ๋ฉด '์ ์
์ ์ถ(FIFO : First In First Out)'์ด๋ผ๋ ๊ฐ๋
์ ๊ธฐ๋ณธ ํ์ฌํ๊ณ ์์ ๊ฒ์ด๋ค. (๋ณธ์ธ์ ๊ตฐ ์์ px๋ณ์ ์ ๊น... ใ
ใ
ใ
) ํ์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ์ ๋์๋ ์คํ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ง์ง๋ง์ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ๋ค. ํ์ง๋ง ๋ฐ์ดํฐ๋ฅผ ๊บผ๋ผ ๋๋ ๊ฐ์ฅ ์์ ์๋ ์์๋ถํฐ ๊บผ๋ธ๋ค. ์๋ฃ์๋ฅผ ์๋ก ๋ค๋ฉด, ์ ํต๊ธฐํ์ด ๊ธธ๊ฒ ๋จ์ ์๋ฃ์๋ค์ ๋ค์ ์ ์ ์์ด๋ฉด์ ๋ด๋ ค์ค๊ณ , ์์ ์ง์ด๋์์๋ ์ ํต๊ธฐํ์ด ์ผ๋ง ๋จ์ง ์์ ์๋ฃ๊ฐ ๊บผ๋ด์ง๋ ๋ฐฉ์์ด๋ค.
1๏ธโฃ ํ์ ํน์ง
์คํ์ ์ ์ ์ ์ถ(FIFO : First In First Out)์ ์๋ฆฌ๋ฅผ ๊ฐ๊ณ ํ์ ํจ๊ป ์ฝ์ ๊ณผ ์ญ์ ๋ฅผ ์ํํ๋ ์๋ฃ๊ตฌ์กฐ๋ค. ํ๋ ์คํ๊ณผ ๋์ผํ๊ฒ ์ฝ์ ์ Push, ์ญ์ ๋ Pop ์ ์ฌ์ฉํ๋ค. ๋์ pop()์ ์ฌ์ฉํ๋ฉด, ๋งจ ๋ค์ ํญ๋ชฉ์ ์ญ์ ํ๋ ์คํ๊ณผ๋ ๋ฌ๋ฆฌ ํ์ ๋งจ ์์ ์๋ ํญ๋ชฉ์ ์ญ์ ํ๋ค.
์ด์ฒ๋ผ ํ๋ ์์ชฝ ๋์ ๋ํด ์์ ์ ์ฒ๋ฆฌํด์ผ ํ๋ฏ๋ก ์คํ๋ณด๋ค๋ ๊ตฌํ์ด ์กฐ๊ธ ๊น๋ค๋กญ๋ค. ํ์ด์ฌ์์ ํ๋ฅผ ๊ตฌํํ๋ ค๋ฉด ๋ฆฌ์คํธ์ ํ ์ชฝ ๋์ ์์๋ฅผ ์ถ๊ฐํ๊ณ pop์ ํ ๋๋ง๋ค ๋ฆฌ์คํธ์ ์์๋ฅผ ํ ์นธ์ฉ ๋น๊ธฐ๋ ๋ฐฉ๋ฒ์ด ์๋ค. ํ์ง๋ง pop์ ํ ๋๋ง๋ค ๋ชจ๋ ์์๋ฅผ ์์ผ๋ก ์ฎ๊ฒจ์ผ ํ๋ฏ๋ก ๋ฐ์ดํฐ์ ํฌ๊ธฐ๊ฐ ํด ๊ฒฝ์ฐ, ์ด๋ ๋นํจ์จ์ ์ธ ๋ฐฉ๋ฒ์ด ๋ ์ ์๋ค.
์ด๋ด ๋๋ ํ์ ์ฒซ ๋ฒ์งธ์ ๋ง์ง๋ง ์์์ ๋ํ ์ธ๋ฑ์ค๋ฅผ ๋ฐ๋ก ๊ด๋ฆฌํ๋ฉด์ ์ํ์ผ๋ก ํ๋ฅผ ์ฌ์ฉํ๋ฉด ๊ณต๊ฐ์ ์ฌํ์ฉํ ์ ์์ผ๋ฉด์ ๋ณด๋ค ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค.
2๏ธโฃ ํ์ด์ฌ ํ ๊ตฌํ ํจ์
- enqueue() : ํ์ ๋งจ ๋์ ํญ๋ชฉ์ ์ถ๊ฐํ๋ ํจ์
- dequeue() : ํ์ ๋งจ ์์ ์๋ ํญ๋ชฉ์ ์ ๊ฑฐํ๋ ํจ์
- peek() : ํ์ ๋งจ ์์ ์๋ ํญ๋ชฉ์ ๋ฐํํ๋ ํจ์
- isfull() : ํ๊ฐ ๊ฐ๋ ์ฐผ๋์ง ํ์ธํ๋ ํจ์
- isempty() : ํ๊ฐ ๋น์ด์๋์ง boolean ํ์ ์ผ๋ก ๋ฐํํ๋ ํจ์
#๏ธโฃ ํ์ ์ข ๋ฅ
์ ํ ํ (Linear Queue)
๊ธฐ๋ณธ ํ์ ํํ๋ก์จ ์์ ๊ทธ๋ฆผ2์ ๊ฐ์ ํํ๋ก ๋์ด์๋ค. ๋ฐฐ์ด๋ก ๊ตฌํ ์ ํฌ๊ธฐ๊ฐ ์ ํ๋์ด ์๊ณ , ๋น ๊ณต๊ฐ์ ์ฌ์ฉํ๊ธฐ ์ํด์ ๋ชจ๋ ์๋ฃ๋ฅผ ๊บผ๋ด๊ฑฐ๋ ๋ด๋ถ ์์๋ค์ ํ ์นธ์ฉ ์ฎ๊ฒจ์ผ ํ๋ ๋จ์ ์ด ์๋ค.
Ex) Queue ๋ค์ง๊ธฐ
def queue_reverse(Q): # Queue ๋ค์ง๊ธฐ
ex_s = []
while not Q.is_empty():
ex_s.append(q.dequeue()) # ex_s์ dequeue() ํ ๊ฐ์ ๋ฆฌ์คํธ ๋ค์ ์ถ๊ฐ.
while ex_s:
Q.enqueue(s.pop()) # ex_s์ ๊ธธ์ด๊ฐ 0์ด ์๋๋ฉด, ex_s์ ๋ค ์์๋ค์ popํด์ Q์ ๋ค์ ์
๋ ฅ.
def display(q: Queue) -> None:
node = q.front
while node:
print(node.data, end = " ")
node = node.next
print()
Q = Queue() # 0, 1, 2, 3, 4
for i in range(5):
Q.enqueue(i)
display(Q) # 0, 1, 2, 3, 4
queue_reverse(Q)
display(Q) # 4, 3, 2, 1, 0
ํํ ํ (Circular Queue)
์ ํ ํ์ ๋ฌธ์ ์ ์ ๋ณด์ํ ํํ์ ํ. 1์ฐจ์ ๋ฐฐ์ด(๋ฆฌ์คํธ) ํํ์ ํ๋ฅผ ์ํ์ผ๋ก ๊ตฌ์ฑํด ๋ฐฐ์ด์ ์ฒ์๊ณผ ๋์ ์ฐ๊ฒฐํด์ ๋ง๋ ๋ค. ์ด๋ ํ ์์
/๋ฐ์ดํฐ๋ฅผ ์์๋๋ก ์ฌ์ฉํ๊ธฐ ์ํด ๋๊ธฐ์ํฌ ๋ ์ฌ์ฉํ๊ฑฐ๋,
Ex) CPU ์ค์ผ์ค๋ง, ๋์คํฌ ์ค์ผ์ค๋ง
์๋ก ๋ค๋ฅธ ์์
ํ๊ฒฝ ๋๋ ํ๋ก์ธ์ค ์ฌ์ด์์ ์๋ฃ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ๋ ์๋ฃ๋ฅผ ์ผ์์ ์ผ๋ก ์ ์ฅํ๋ ์ฉ๋๋ก ๋ง์ด ์ฌ์ฉํ๋ค. (== ๋น๋๊ธฐ ์ ์ก)
Ex) IO ๋ฒํผ, ํ์ดํ, ํ์ผ IO
๐ Reference
02. ์คํ๊ณผ ํ
[TOC] # ๋๊ธฐ ๋ฒํธ ํธ์ถ ์๊ณ ๋ฆฌ์ฆ 4๋ฒ์ ์ ๋ ฅํ๋ฉด ๋๊ธฐ ๋ฆฌ์คํธ์์ ์ฒซ ๋ฒ์งธ ์์๋ฅผ ํธ์ถํ ๊ฒ์ ๋๋ค. ์ฌ๊ธฐ์๋ ๋๊ฐ์ง ์์ ์ด ๋ค์ด๊ฐ๋๋ค. 1. ๋ฆฌ์คํธ ์ฒซ ๋ฒ์งธ ์์น์ ์…
wikidocs.net
05. ํ์ด์ฌ์ผ๋ก ํ ๊ตฌํํ๊ธฐ
## Queue๋ ๋๊ธฐ ํ๋ ฌ(์ค)์ด๋ค. ํ๋ ๋ญ๊ฐ๋ฅผ ์ฌ๊ณ ๊ณ์ฐํ๊ฑฐ๋ ์ด๋ค ์ฅ์์ ๋ค์ด๊ฐ ๋ ์ค์ ์ ์์๋๋ก ์ฒ๋ฆฌํ๋ ๊ฒ์ ์๊ฐํ๋ฉด ๋๋ค. ๋ง์ ์์ ์๋ฃ๋ฅผ ํ๋ฆฐํฐ๋ก ์ถ๋ ฅํ ๋…
wikidocs.net
04. ํ์ด์ฌ์ผ๋ก ์คํ ๊ตฌํํ๊ธฐ
## ์คํ(Stack)์ ์๋ฃ๋ฅผ ์์๋์ ๊ฒ์ด๋ค. ์คํ์ ์๋ฅ๋ ์ฑ ์์ ๋ค๋ฅธ ์๋ฅ๋ ์ฑ ์ ์์ ์ฌ๋ฆฌ๋ ํํ๋ค. ๋ฐ๋ผ์ ์๋ฃ๋ฅผ ๊บผ๋ผ ๋๋ ๋งจ ์๋ถํฐ ๊บผ๋ด์ผ ํ๋ค. ์ฆ, ๋ง์ง๋ง์…
wikidocs.net
์ด๋ฏธ์ง ์ถ์ฒ) "https://www.flaticon.com/kr/free-icons/" ์ ์์: Alfredo Creates - Flaticon
'Python > ๐ญ Basic' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฆฌ์คํธ ์ปดํ๋ฆฌํจ์ [๋ฆฌ์คํธ] (0) | 2023.12.19 |
---|