코딩테스트/LeetCode

[LeetCode] Implement Queue using Stacks(스택을 이용한 큐 구현 )

jungmin.park 2023. 10. 19. 17:23

https://leetcode.com/problems/implement-queue-using-stacks/description/

 

Implement Queue using Stacks - LeetCode

Can you solve this real interview question? Implement Queue using Stacks - Implement a first in first out (FIFO) queue using only two stacks. The implemented queue should support all the functions of a normal queue (push, peek, pop, and empty). Implement t

leetcode.com

  • void push(int x) : 요소 x를 대기열 뒤쪽으로 푸시한다.
  • int pop() : 대기열의 앞부분에서 요소를 제거하고 반환
  • int peek() : 대기열의 맨 앞에 있는 요소를 반환
  • boolean empty() : 대기열이 비어 있으면 true 반환하고, 그렇지 않으면 false을 반환한다.

<리스트 구현>

  • 파이썬은 리스트가 큐 기능을 흉내낼 수 있기 때문에 리스트 구현으로 스택을 만들어 보았다.

생성자 만들기

class MyQueue:
    def __init__(self):
            self.k = []

 

삽입기능 구현하기

    def push(self, x):
        self.k.append(x)

 

삭제기능 구현하기

  • 스택에 데이터가 존재 할 경우에만 반환을 해주기로 했다.
    def pop(self):
        if self.k:
            n = self.k[0]
            self.k.remove(n)
            return n

 

가장 맨 앞에 있는 요소 구현

    def peek(self):
            if self.k:
                return self.k[0]

 

비어있는지 확인하는 기능 구현

def empty(self):
        if len(self.k) == 0:
            return True
        else:
            return False


<Deque로 구현>

  • 리스트와 구현방식은 비슷하지만 성능을 확인해보기 위해 바꿔보았다.
from collections import deque

class MyQueue:
    def __init__(self):
        self.dq = deque()

    def push(self, x):
        self.dq.append(x)

    def pop(self):
        if self.dq:
            return self.dq.popleft()

    def peek(self):
        if self.dq:
            return self.dq[0]

    def empty(self):
        if len(self.dq) == 0:
            return True
        else:
            return False
  • 다른점은 pop 할 때 popleft() 함수를 사용한점