Implement Queue using Stacks
요구 사항
- Stack을 이용하여 Queue를 구현하는데 구현된 큐는 push(append), pop(shift), is_empty(bool), peek등 일반적인 큐의 모든 기능을 지원해야 한다.
- peek은 Queue의 맨 앞에 있는 요소를 반환한다.
- Stack의 표준 작업만 이용해서 만든다. (shift등 사용불가)
Solution
class Myqueue:
def __init__(self):
self.queue = []
def push(self, data):
self.queue.append(data)
def pop(self):
pop_obj = None
if self.is_empty():
print("Queue is empty")
else:
pop_obj = self.queue[0]
self.queue = self.queue[1:]
return pop_obj
def peek(self):
peek_obj = None
if self.is_empty():
print("Queue is empty")
else:
peek_obj = self.queue[0]
return peek_obj
def is_empty(self):
empty = None
if len(self.queue) == 0:
empty = True
return empty
que = Myqueue()
que.push(1)
print(que.pop(), que.is_empty(), que.peek())
📌 코드 풀이
- self.queue = [] 로 queue를 만들어준다.
- is_empty를 가장 먼저 만들어서 len(self.queue) == 0을 이용하여 스택이 빈것을 True or False로 반환해준다.
- push는 조건이 필요없이 제일 뒤로 삽입되기 때문에 self.queue.append(data)로 넣어준다.
- pop은 우선 pop_obj=None으로 만들어 준뒤, self.is_empty()로 큐가 비지 않았다면 pop_obj = self.queue[0]을 만들어주고 queue에서 빠져야 되기 때문에 바로 아래에 self.queue = self.queue[1:] index0을 빼고 만들어준다.
- peek도 pop과 마찬가지로 peek_obj를 None으로 만들어준뒤 is_empty조건을 거치고 peek_obj=self.queue[0]으로 첫번째 요소를 반환해주면 된다.
leetcode
https://leetcode.com/problems/implement-queue-using-stacks/