스택 구현하겠다고 class로 똥꼬쇼 할 필요 없다.
파이썬 모듈 deque로 날먹 가능하니 말이다.
…
왜 맨날 개고생 한번 하고 나서 쉬운길 알려주는지 모르겠다.
저자는 꽤 가학성향이 있는 듯 하다.
그러지 않고서야 잔뜩 괴롭히고 나서 위안을 줄리 없으니
독자를 피학적으로 만드려는 계략이 아닐까 싶다
어쩐지 저번에…
…
크흠, 아무것도 아니다
아무튼… deque를 활용해 스택을 작성하느 법을 알아보자
그 덱(deck)아니니 오해 말자
안타깝게도 푸른눈의 백룡이나
로얄 스트레이트 플러쉬는 불가능하다…
그래도 샤이닝 드로우 외치며 코딩하면 한결 낫다
from typing import Any
from collections import deque
class Stack:
"""고정 길이 스택 클래스(collections.deque를 사용)"""
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()
def peek(self) -> Any:
"""스택에서 데이터를 피크"""
return self.__stk[-1]
def clear(self) -> None:
"""스택을 비웁니다"""
self.__stk.clear()
def find(self, value: Any) -> Any:
"""스택에서 value를 찾아 인덱스(없으면 -1)를 반환"""
try:
return self.__stk.index(value)
except ValueError:
return -1
def count(self, value: Any) -> int:
"""스택에 포함된 value의 개수를 반환"""
return self.__stk.count(value)
def __contains__(self, value: Any) -> bool:
"""스택에 value가 포함되어 있는지 판단"""
return self.count(value)
def dump(self) -> int:
"""스택 안에 있는 모든 데이터를 나열"""
print(list(self.__stk))