자료구조

파이썬) 스택으로 큐 구현하기 (Queue with stack)

cocojen 2022. 4. 12. 20:13

스택 두 개로 큐를 구현해보자.

그 뭐더라.. 구현하다보니 그 게임이 생각난다. 버터링같은 거 요리조리 옮기는 거.. 

그거 어렸을 때 중독돼서 진짜 빨리했었는데 ㅋㅋ

class Queue:
    def __init__(self) -> None:
        # enqueue 할 때 쓸 스택
        self.enqueue_stack = []
        # dequeue 할 때 쓸 스택
        self.dequeue_stack = []
        
    def enqueue(self, data):
        # queue에 아이템 넣기 O(1)
        self.enqueue_stack.append(data)
        
    def dequeue(self):
        # 두 stack 모두 아이템이 하나도 없을 경우 raise Exception 하기
        if len(self.enqueue_stack) == 0 and len(self.dequeue_stack) == 0:
            raise Exception("Stacks are empty")
        # dequeue_stack 이 비어있으면 enqueue_stack에서 pop해서 넣기 O(n)
        if len(self.dequeue_stack) == 0:
            while len(self.enqueue_stack) != 0:
                self.dequeue_stack.append(self.enqueue_stack.pop())
        return self.dequeue_stack.pop()
    

if __name__ == '__main__':
    queue = Queue()
    queue.enqueue(0)
    queue.enqueue(1)
    queue.enqueue(2)
    queue.enqueue(3)
    queue.enqueue(5)
    
    print(f' queue.dequeue : {queue.dequeue()}')
    print(f' queue.dequeue : {queue.dequeue()}')
    print(f' queue.dequeue : {queue.dequeue()}')
    print(f' queue.dequeue : {queue.dequeue()}')