jun-wiki

View My GitHub Profile

Posts (Latest 10 updated) :
Read all
Contents:
  1. 덱 (deque)

스택 구현하겠다고 class로 똥꼬쇼 할 필요 없다.

파이썬 모듈 deque로 날먹 가능하니 말이다.


왜 맨날 개고생 한번 하고 나서 쉬운길 알려주는지 모르겠다.
저자는 꽤 가학성향이 있는 듯 하다.
그러지 않고서야 잔뜩 괴롭히고 나서 위안을 줄리 없으니

독자를 피학적으로 만드려는 계략이 아닐까 싶다

어쩐지 저번에…





크흠, 아무것도 아니다

아무튼… 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))