: λ°μ΄ν°λ₯Ό μμ μ μ₯ν λ μ¬μ©νλ μλ£κ΅¬μ‘°, λ°μ΄ν°λ νμ
μ μΆ λ°©μ.
νΈμ / ν / κΌλκΈ° / λ°λ₯ /
push() / pop() / peek() / clear() / find() / count() / __contains__() / dump()
# κ³ μ κΈΈμ΄ μ€ν ν΄λμ€(FixedStack) μ¬μ©νκΈ°
form enum import Enum #enumerate() ν¨μλ μΈμλ‘ λμ΄μ¨ λͺ©λ‘μ κΈ°μ€μΌλ‘ μΈλ±μ€μ μμλ₯Ό μ°¨λ‘λλ‘ μ κ·Όνκ² ν΄μ£Όλ λ°λ³΅μ(iterator) κ°μ²΄λ₯Ό λ°νν΄μ£Όλ ν¨μ
from fixed_stack import FixedStack
Menu=Enum('Menu', ['νΈμ', 'ν', 'νΌν¬', 'κ²μ', 'λ€ν', 'μ’
λ£'])
def select menu() -> Menu:
s=[f`({m.value}){m.name}' for m in Menu]
while True:
print(*s, sep=' ', end='')
n=int(input(': '))
if 1<=n<=len(Menu):
return Menu(n)
s=FixedStack(64) #μ΅λ 64κ° νΈμκ°λ₯ν μ€ν
while True:
print(f'νμ¬ λ°μ΄ν° κ°μ: {len(s)/{s.capacity}')
menu=select_menu() #λ©λ΄μ ν
if menu==Menu.νΈμ:
x=int(input('λ°μ΄ν°λ₯Ό μ
λ ₯νμΈμ.: '))
try:
s.push(x)
except FixedStack.Full:
print('μ€νμ΄ κ°λ μ°¨ μμ΅λλ€.')
elif menu==Menu.ν:
try:
x=s.pop()
print(f'νν λ°μ΄ν°λ {x}μ
λλ€.')
except FixedStack.Empty:
print('μ€νμ΄ λΉμ΄μμ΅λλ€.')
elif menu==Menu.νΌν¬:
try:
x=s.peek()
print(f'νΌν¬ν λ°μ΄ν°λ {x}μ
λλ€.')
except FixedStack.Empty:
print('μ€νμ΄ λΉμ΄μμ΅λλ€.')
elif menu==Menu.κ²μ:
x=int(input('κ²μν κ°μ μ
λ ₯νμΈμ.: '))
if x in s:
print(f'{s.count(x)}κ° ν¬ν¨λκ³ , 맨 μμ μμΉλ {s.find(x)}μ
λλ€.')
else:
print('κ²μκ°μ μ°Ύμ μ μμ΅λλ€.')
elif menu==Menu.λ€ν:
s.dump()
else:
break
collections.dequeλ‘ μ€ν ꡬν : 맨 μκ³Ό 맨 λ μμͺ½μμ μμλ₯Ό μΆκ°, μμ νλ μλ£κ΅¬μ‘°μΈ λ±μ ꡬννλ 컨ν μ΄λ.
# κ³ μ κΈΈμ΄ μ€ν ν΄λμ€ collections.deque μ¬μ©νμ¬ κ΅¬ννκΈ°
from typing import Any
from collections import deque
class Stack:
def __init__(self, maxlen: int=256) -> None:
"""μ€ν μ΄κΈ°ν"""
self.capacity=maxlen
self.__stk=deque([], maxlen)
def__len__(self) -> int:
"""μ€νμ μμ¬μλ λ°μ΄ν° κ°μ λ°ν"""
return len(self.__stk)
def is_empty(self) -> bool:
"""μ€νμ΄ λΉμ΄μλμ§ νλ¨"""
return not self.__stk
def is_full(self) -> bool:
"""μ€νμ΄ κ°λμ°¨ μλμ§ νλ¨"""
return len(self.__stk)==self.__stk.maxlen
def push(self, value: Any) -> None:
"""μ€νμ valueλ₯Ό νΈμ"""
self.__stk.append(value)
def pop(self) -> Any:
"""μ€νμμ λ°μ΄ν°λ₯Ό ν"""
return self.__stk.pop()
"""μ΄ν μλ΅"""
: μ μ
μ μΆ κ΅¬μ‘°
μΈν / λν / νλ°νΈ(맨 μ)=μΈλ±μ€ 0 / 리μ΄(맨 λ)
λ°°μ΄λ‘ ꡬν / λ§ λ²νΌλ‘ ꡬν
νλ°νΈ: 맨 μ μμ μΈλ±μ€
리μ΄: 맨 λ μμ λ°λ‘ λ€ μΈλ±μ€(=λ€μ μΈνλλ λ°μ΄ν°κ° μ μ₯λλ μμΉ)