[์ž๋ฃŒ๊ตฌ์กฐ] 03. Stack

2021. 8. 10. 08:00ใ†์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ ์ค€๋น„/์ž๋ฃŒ๊ตฌ์กฐ

728x90
๋ฐ˜์‘ํ˜•

์•ˆ๋…•ํ•˜์„ธ์š”? ์ฃผ๋‹ˆํ•˜๋ž‘ ์ž…๋‹ˆ๋‹ค.

์˜ค๋Š˜์€ ์ž๋ฃŒ๊ตฌ์กฐ์—์„œ ํ์— ๋Œ€ํ•ด์„œ ๊ณต๋ถ€ ํ•ด ๋ณด๋„๋ก ํ•  ๊ฒƒ์ด์—์š”!

์ œ๊ฐ€ ํ‘ผ ์ฝ”๋“œ๊ฐ€ ๊ถ๊ธˆํ•˜์‹œ๋‹ค๋ฉด? ์ฃผ๋‹ˆํ•˜๋ž‘์˜ ๊นƒ ํ—ˆ๋ธŒ์— ๊ด€์‹ฌ์„ ์ฃผ์„ธ์š”!

๋ฐ”๋กœ ์‹œ์ž‘ ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค!





 

๐Ÿ“Œ ์Šคํƒ ( 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์— ๋„ฃ๊ธฐ

์ถœ์ฒ˜ : https://visualgo.net/ko/list

 

Stack์— Data๋ฅผ ๋„ฃ๊ธฐ ์ „ ๋ชจ์Šต์ด์—์š”!

Data๋ฅผ ๋„ฃ์œผ๋ฉด head (Top, ๋งจ ์œ— ๋ถ€๋ถ„)์— Data๊ฐ€ ์ž…๋ ฅ ๋  ๊ฒƒ์ด์—์š”.

 

์ถœ์ฒ˜ : https://visualgo.net/ko/list

 

  • Pop() : Data๋ฅผ Stack์—์„œ ๊บผ๋‚ด๊ธฐ

 

์ถœ์ฒ˜ : https://visualgo.net/ko/list

 

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())

 

 

 


์ฃผ๋‹ˆํ•˜๋ž‘์˜ ๊ธ€์ด ๋งˆ์Œ์— ๋“œ์…จ๋‚˜์š”? ๊ตฌ๋…๊ณผ ๊ณต๊ฐ! ๊ทธ๋ฆฌ๊ณ , ๋Œ“๊ธ€์€ ์ฃผ๋‹ˆํ•˜๋ž‘์—๊ฒŒ ๋งŽ์€ ํž˜์ด ๋ฉ๋‹ˆ๋‹ค

728x90
๋ฐ˜์‘ํ˜•