๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
python

[python] ์ž๋ฃŒ๊ตฌ์กฐ - ์Šคํƒ , ํ , ์žฌ๊ท€ํ•จ์ˆ˜

by hello_world.cpp 2022. 5. 13.
728x90
๋ฐ˜์‘ํ˜•

 

๐ŸŽต ํƒ์ƒ‰

: ๋งŽ์€ ์–‘์˜ ๋ฐ์ดํ„ฐ ์ค‘์—์„œ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๋Š” ๊ณผ์ •

  • ๊ทธ๋ž˜ํ”„, ํŠธ๋ฆฌ ๋“ฑ์˜ ์ž๋ฃŒ๊ตฌ์กฐ ์•ˆ์—์„œ ํƒ์ƒ‰์„ ํ•˜๋Š” ๋ฌธ์ œ๋ฅผ ์ž์ฃผ ๋‹ค๋ฃฌ๋‹ค
  • ๋Œ€ํ‘œ์ ์ธ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ DFS์™€ BFS๋ฅผ ๊ผฝ์„ ์ˆ˜ ์žˆ๋‹ค.
  • DFS์™€ BFS์— ๋Œ€ํ•ด ์ œ๋Œ€๋กœ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด์„œ ์Šคํƒ๊ณผ ํ์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ์ „์ œ๋˜์–ด์•ผํ•œ๋‹ค.

๐ŸŽต ์ž๋ฃŒ๊ตฌ์กฐ

: ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œํ˜„ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๊ณ  ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๊ตฌ์กฐ

  • ์Šคํƒ๊ณผ ํ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ํ•ต์‹ฌ ํ•จ์ˆ˜
    • ์‚ฝ์ž… (push) : ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•œ๋‹ค
    • ์‚ญ์ œ (pop) : ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•œ๋‹ค
    ๐Ÿ‘‰ ์‚ฝ์ž…๊ณผ ์‚ญ์ œ ์™ธ์—๋„ ์˜ค๋ฒ„ํ”Œ๋กœ์™€ ์–ธ๋”ํ”Œ๋กœ๋ฅผ ๊ณ ๋ฏผํ•ด์•ผํ•œ๋‹ค.
    • ์˜ค๋ฒ„ํ”Œ๋กœ : ์ €์žฅ๊ณต๊ฐ„์— ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ€๋“ ์ฐฌ ์ƒํƒœ์—์„œ ์‚ฝ์ž… ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ๋ฐœ์ƒ
    • ์–ธ๋”ํ”Œ๋กœ : ๋ฐ์ดํ„ฐ๊ฐ€ ์ „ํ˜€ ๋“ค์–ด์žˆ์ง€ ์•Š์€ ์ƒํƒœ์—์„œ ์‚ญ์ œ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ• ๋•Œ ๋ฐœ์ƒ

 

 

 


โค๏ธ ์Šคํƒ (stack)

โ˜ ์Šคํƒ์€ ๊ทธ๋ฆ‡ ์Œ“๊ธฐ์™€ ๋น„์œ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ฆ‡์€ ์•„๋ž˜์—์„œ๋ถ€ํ„ฐ ์œ„๋กœ ์ฐจ๊ณก์ฐจ๊ณก ์Œ“์•„์•ผํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ•ญ์ƒ ์œ„์— ์žˆ๋Š” ๊ทธ๋ฆ‡๋ถ€ํ„ฐ ๋จผ์ € ๋‚ด๋ ค์•ผํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ๊ตฌ์กฐ๋ฅผ ์„ ์ž…ํ›„์ถœ (First In Last Out) ๊ตฌ์กฐ ๋˜๋Š” ํ›„์ž…์„ ์ถœ (Last In First Out)๊ตฌ์กฐ๋ผ๊ณ  ํ•œ๋‹ค.

 

 

  • ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ
    stack=[]
    
    stack.append(5)
    stack.append(2)
    stack.append(3)
    stack.append(7)
    stack.pop()
    stack.append(1)
    stack.append(4)
    stack.pop()
    
    stack
    
  • ๐Ÿ‘‰ ์‚ฝ์ž…(5) → ์‚ฝ์ž…(2) → ์‚ฝ์ž…(3) → ์‚ฝ์ž…(7) → ์‚ญ์ œ() → ์‚ฝ์ž…(1) → ์‚ฝ์ž…(4) → ์‚ญ์ œ()

ํŒŒ์ด์ฌ์—์„œ ์Šคํƒ์„ ์ด์šฉํ•  ๋•Œ์—๋Š” ๋ณ„๋„์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.

append() ๋ฉ”์„œ๋“œ๋Š” ๋ฆฌ์ŠคํŠธ์˜ ๊ฐ€์žฅ ๋’ค์ชฝ์— ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…ํ•˜๊ณ , pop() ๋ฉ”์„œ๋“œ๋Š” ๋ฆฌ์ŠคํŠธ์˜ ๊ฐ€์žฅ ๋’ค์ชฝ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ด์˜ค๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ๋ณธ ๋ฆฌ์ŠคํŠธ์—์„œ append()์™€ pop() ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•˜๋ฉด ์Šคํƒ ์ž๋ฃŒ๊ตฌ์กฐ์™€ ๋™์ผํ•˜๊ฒŒ ๋™์ž‘ํ•œ๋‹ค.

 

 

 


โค๏ธ ํ (queue)

โ˜ ํ๋Š” ๋Œ€๊ธฐ์ค„์— ๋น„์œ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋†€์ด๊ณต์›์— ์ž…์žฅํ•˜๊ธฐ ์œ„ํ•ด ์ค„์„ ์„ค๋•Œ ๋จผ์ € ์˜จ ์‚ฌ๋žŒ์ด ๋จผ์ € ๋“ค์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค. ๋‚˜์ค‘์— ์˜จ ์‚ฌ๋žŒ์ผ์ˆ˜๋ก ๋‚˜์ค‘์— ๋“ค์–ด๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— ‘๊ณต์ •ํ•œ’ ์ž๋ฃŒ๊ตฌ์กฐ๋ผ๊ณ  ๋น„์œ ๋œ๋‹ค. ์ด๋Ÿฌํ•œ ๊ตฌ์กฐ๋ฅผ ์„ ์ž…์„ ์ถœ(First In First Out) ๊ตฌ์กฐ ๋ผ๊ณ  ํ•œ๋‹ค.

  • ๊ฐ„๋‹จํ•œ ์˜ˆ์ œ
    from collections import deque
    
    queue=deque()
    
    queue.append(5)
    queue.append(2)
    queue.append(3)
    queue.append(7)
    queue.popleft()
    queue.append(1)
    queue.append(4)
    queue.popleft()
    
    queue
    
    โ“ deque๋Š” ์Šคํƒ๊ณผ ํ์˜ ์žฅ์ ์„ ๋ชจ๋‘ ์ฑ„ํƒํ•œ ๊ฒƒ์ด๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๊ณ  ๋นผ๋Š” ์†๋„๊ฐ€ ๋ฆฌ์ŠคํŠธ ์ž๋ฃŒํ˜•์— ๋น„ํ•ด ํšจ์œจ์ ์ด๋ฉฐ queue ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋” ๊ฐ„๋‹จํ•˜๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ์—์„œ collections ๋ชจ๋“ˆ๊ณผ ๊ฐ™์€ ๊ธฐ๋ณธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ์„ ํ—ˆ์šฉํ•˜๋ฏ€๋กœ ์•ˆ์‹ฌํ•˜๊ณ  ์‚ฌ์šฉํ•ด๋„ ๊ดœ์ฐฎ๋‹ค.
  • ๐Ÿ‘‰ ์‚ฝ์ž…(5) → ์‚ฝ์ž…(2) → ์‚ฝ์ž…(3) → ์‚ฝ์ž…(7) → ์‚ญ์ œ() → ์‚ฝ์ž…(1) → ์‚ฝ์ž…(4) → ์‚ญ์ œ()

 

 

 

โค๏ธ ์žฌ๊ท€ํ•จ์ˆ˜

โ˜ ์ž๊ธฐ ์ž์‹ ์„ ํ˜ธ์ถœํ•˜๋Š” ํ•จ์ˆ˜ ํ”„๋ž™ํ„ธ ๊ตฌ์กฐ์™€ ํก์‚ฌํ•˜๋‹ค.

def recursion_fun(count):
    print('์žฌ๊ท€')
    if count==10:return
    
    recursion_fun(count=count+1)

๐Ÿ‘‰ ๋ฌดํ•œํžˆ ํ˜ธ์ถœํ•˜์ง€ ์•Š๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ค‘๊ฐ„์— ์žฌ๊ท€ํ•จ์ˆ˜์˜ ์ข…๋ฃŒ์กฐ๊ฑด์„ ์„ค์ •ํ•ด์ฃผ์–ด์•ผํ•œ๋‹ค.

์ปดํ“จํ„ฐ ๋‚ด๋ถ€์—์„œ ์žฌ๊ท€ ํ•จ์ˆ˜์˜ ์ˆ˜ํ–‰์€ ์Šคํƒ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ด์šฉํ•œ๋‹ค. ํ•จ์ˆ˜๋ฅผ ๊ณ„์† ํ˜ธ์ถœํ–ˆ์„ ๋•Œ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ํ˜ธ์ถœํ•œ ํ•จ์ˆ˜๊ฐ€ ๋จผ์ € ์ˆ˜ํ–‰์„ ๋๋‚ด์•ผ ๊ทธ ์•ž์˜ ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด ์ข…๋ฃŒ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

  • ํŒฉํ† ๋ฆฌ์–ผ ์˜ˆ์ œ
def factorial(n):
    if n==0 or n==1:
        return 1
    return n*factorial(n-1)

cf ) for๋ฌธ์œผ๋กœ ๊ตฌํ˜„ํ•ด๋ณด๊ธฐ

def factorial_for(n):
    result=1
    if n>1:
        for i in range(1,n+1):
            result=result*i
        
    return result

โ“ ์žฌ๊ท€ํ•จ์ˆ˜๋กœ ๊ตฌํ˜„ํ• ๋•Œ์™€ for๋ฌธ์œผ๋กœ ๊ตฌํ˜„ํ•  ๋•Œ ์‹คํ–‰๊ฒฐ๊ณผ๋Š” ๋™์ผํ•˜๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ๋ฐ˜๋ณต๋ฌธ ๋Œ€์‹ ์— ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์žฅ์ ์€ ๋ฌด์—‡์ผ๊นŒ?

โ€ผ๏ธ ์ฝ”๋“œ๊ฐ€ ๊ฐ„๊ฒฐํ•ด์ง„๋‹ค.

โ€ผ๏ธ ์žฌ๊ท€ํ•จ์ˆ˜๊ฐ€ ์ ํ™”์‹์„ ๊ทธ๋Œ€๋กœ ์†Œ์Šค์ฝ”๋“œ๋กœ ์˜ฎ๊ธด๊ฒƒ์ด๋‹ค. → ๋‹ค์ด๋‚˜๋ฏน ํ”„๋กœ๊ทธ๋ž˜๋ฐ์œผ๋กœ ์ด์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์— ์ค‘์š”ํ•˜๋‹ค.

728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€