2021. 8. 10. 08:00ใ์ฝ๋ฉ ํ ์คํธ ์ค๋น/์๋ฃ๊ตฌ์กฐ
์๋ ํ์ธ์? ์ฃผ๋ํ๋ ์ ๋๋ค.
์ค๋์ ์๋ฃ๊ตฌ์กฐ์์ ํ์ ๋ํด์ ๊ณต๋ถ ํด ๋ณด๋๋ก ํ ๊ฒ์ด์์!
์ ๊ฐ ํผ ์ฝ๋๊ฐ ๊ถ๊ธํ์๋ค๋ฉด? ์ฃผ๋ํ๋์ ๊น ํ๋ธ์ ๊ด์ฌ์ ์ฃผ์ธ์!
๋ฐ๋ก ์์ ํด ๋ณด๊ฒ ์ต๋๋ค!
๐ ์คํ ( Stack )
- Data๋ฅผ ์ ํ์ ์ผ๋ก ์ ๊ทผํ ์ ์๋ ๊ตฌ์กฐ
- ํ ์ชฝ ๋์์๋ง ์๋ฃ๋ฅผ ๋ฃ๊ฑฐ๋ ๋บ ์ ์๋ ๊ตฌ์กฐ (์ผ๋ฉด์ด ๋งํ์๊ณ , ์์๋ง ๋ซ๋ ค์๋ BOX)
- ๊ฐ์ฅ ๋์ค์ ์์ Data๋ฅผ ๊ฐ์ฅ ๋จผ์ ๋นผ๋ผ ์ ์๋ ๊ตฌ์กฐ
- Queue : FIFO (First-In, First Out)
- Stack : LIFO (Last-In, First Out)
๐Stack์ ๊ตฌ์กฐ
- Stack์ LIFO(Last-In, First Out) ๋๋ FILO(First-In, Last Out) Data ๊ด๋ฆฌ ๋ฐฉ์
- ๋ํ์ Stack ํ์ฉ
- ์ปดํจํฐ ๋ด๋ถ์ ํ๋ก์ธ์ค (์ปดํจํฐ์์ ๋์ํ๊ณ ์๋ ํ๋ก๊ทธ๋จ) ๊ตฌ์กฐ์ ํจ์ ๋์ ๋ฐฉ์
- ์ฃผ์ ๊ธฐ๋ฅ
- Push() : Data๋ฅผ Stack์ ๋ฃ๊ธฐ
Stack์ Data๋ฅผ ๋ฃ๊ธฐ ์ ๋ชจ์ต์ด์์!
Data๋ฅผ ๋ฃ์ผ๋ฉด head (Top, ๋งจ ์ ๋ถ๋ถ)์ Data๊ฐ ์ ๋ ฅ ๋ ๊ฒ์ด์์.
- Pop() : Data๋ฅผ Stack์์ ๊บผ๋ด๊ธฐ
pop์ ํ๋๋ ๋งจ ์์ ์ ๋ ฅ๋ ๊ฐ์ด ๋๊ฐ๋ฉด์ ๋ค์ ์ ์ํ๋ก ๋ณต๊ทํ ๊ฒ์ด์์!
๐ Stack ๊ตฌ์กฐ์ ํ๋ก์ธ์ค Stack
Stack ๊ตฌ์กฐ๋ ํ๋ก์ธ์ค ์คํ ๊ตฌ์กฐ์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ธ ๊ฒ์ด์์.
๊ทธ๋์ ํจ์ ํธ์ถ ์ ํ๋ก์ธ์ค ์คํ ๊ตฌ์กฐ๋ฅผ Stack๊ณผ ๋น๊ตํด์ ์ดํดํ ํ์๊ฐ ์๋ต๋๋ค!
# recursive ํจ์ ์ ์ธ ๋งค๊ฐ๋ณ์๋ก๋ data๋ฅผ ๋ฐ๋๋ค.
def recursive(data):
# data์ ๊ฐ์ด 0๋ณด๋ค ์๋ค๋ฉด?
if data < 0:
# "ended"๋ฅผ ์ถ๋ ฅํด๋ผ
print("ended")
else: # ์๋๋ผ๋ฉด?
# data์ ๊ฐ์ ์ถ๋ ฅํด๋ผ
print(data)
# ํจ์ ์์์ ์๊ธฐ ํจ์๋ฅผ ๋ค์ ํธ์ถ (์ฌ๊ท ํจ์)
# ์๊ธฐ ํจ์๋ฅผ ํธ์ถํ๋ฉด์ ์ธ์ ๊ฐ์ผ๋ก data์ 1์ ๋บ ๊ฐ์ ์ ๋ฌํ์ฌ ๋ฐ๋ณต๋ฌธ๊ณผ ๊ฐ์ ํํ๋ก ๋์
# 0๋ณด๋ค ์์ ๋ ๊น์ง (-1) ๊น์ง ๋ฐ๋ณตํ๋ค๊ฐ print("ended"๋ฅผ ์ถ๋ ฅ)
recursive(data - 1)
# ์ฌ๊ท ํจ์์๊ธฐ ๋๋ฌธ์ ํธ์ถํ ๊ณณ์ผ๋ก ๋์์์ผ ํ๋ค.
# -1๊น์ง ๋ฐ๋ณตํ์ฌ "ended"๋ฅผ ์ถ๋ ฅํ ๋ค์ ํจ์์ ์ฐ์ฐ์ด ๋๋๋ฉด Stack์ ์์ธ ๊ฐ๋ค์ด ํ๋์ฉ ์ง์์ง๋ฉด์ ๋ค์ ์ฐ์ฐ ์ฒ๋ฆฌ๋ฅผ ํ๊ฒ ๋๋๋ฐ
# ๊ทธ ๋ถ๋ถ์ด ์๋ ๋ถ๋ถ์ด๋ค.
print("returned", data)
# recursive ํจ์์ ์ธ์๊ฐ์ผ๋ก 4๋ฅผ ์ค๋ค.
recursive(4)
print('=' * 100)
๐ Python List ๊ธฐ๋ฅ์์ ์ ๊ณตํ๋ Method๋ก Stack ์ฌ์ฉ
- append() = push ๊ธฐ๋ฅ, pop Method ์ ๊ณต
data_stack = list()
# append Method๋ฅผ ์ด์ฉํ์ฌ ์ ์ 1๊ณผ 2๋ฅผ data_stack์ด๋ผ๋ list์ ๋ฃ๋๋ค.
data_stack.append(1)
data_stack.append(2)
print(data_stack)
# ๊ฒฐ๊ณผ : [1, 2]
# data_stack์ ์๋ ๊ฐ์ ํ๋ ๊บผ๋ธ๋ค.
print(data_stack.pop())
์ฃผ๋ํ๋์ ๊ธ์ด ๋ง์์ ๋์ จ๋์? ๊ตฌ๋ ๊ณผ ๊ณต๊ฐ! ๊ทธ๋ฆฌ๊ณ , ๋๊ธ์ ์ฃผ๋ํ๋์๊ฒ ๋ง์ ํ์ด ๋ฉ๋๋ค
'์ฝ๋ฉ ํ ์คํธ ์ค๋น > ์๋ฃ๊ตฌ์กฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๋ฃ๊ตฌ์กฐ] Tree ๊ตฌ์กฐ(2) (0) | 2021.08.29 |
---|---|
[์๋ฃ๊ตฌ์กฐ] 05. Hash Table (0) | 2021.08.27 |
[์๋ฃ๊ตฌ์กฐ] 04. Linked List (0) | 2021.08.15 |
[์๋ฃ๊ตฌ์กฐ] 02. Queue (0) | 2021.08.09 |
[์๋ฃ๊ตฌ์กฐ] 01. ๋ฐฐ์ด (0) | 2021.08.08 |