파이썬 알고리즘 인터뷰 문제 25번(리트코드 622) Design Circular Queue
https://leetcode.com/problems/design-circular-queue/
class MyCircularQueue:
def __init__(self, k: int):
self.size = k
self.q = collections.deque()
def enQueue(self, value: int) -> bool:
if self.isFull():
return False
self.q.append(value)
return True
def deQueue(self) -> bool:
if self.isEmpty():
return False
self.q.popleft()
return True
def Front(self) -> int:
if self.q:
return self.q[0]
else:
return -1
def Rear(self) -> int:
if self.q:
return self.q[-1]
else:
return -1
def isEmpty(self) -> bool:
return not self.q
def isFull(self) -> bool:
return len(self.q) == self.size
# Your MyCircularQueue object will be instantiated and called as such:
# obj = MyCircularQueue(k)
# param_1 = obj.enQueue(value)
# param_2 = obj.deQueue()
# param_3 = obj.Front()
# param_4 = obj.Rear()
# param_5 = obj.isEmpty()
# param_6 = obj.isFull()
class MyCircularQueue:
def __init__(self, k: int):
self.q = [None] * k
self.size = k
self.p1 = 0
self.p2 = 0
def enQueue(self, value: int) -> bool:
if self.q[self.p2] is None:
self.q[self.p2] = value
self.p2 = (self.p2 + 1) % self.size
return True
else:
return False
def deQueue(self) -> bool:
if self.q[self.p1] is None:
return False
else:
self.q[self.p1] = None
self.p1 = (self.p1 + 1) % self.size
return True
def Front(self) -> int:
if self.q[self.p1] is None:
return -1
else:
return self.q[self.p1]
def Rear(self) -> int:
if self.q[self.p2 - 1] is None:
return -1
else:
return self.q[self.p2 - 1]
def isEmpty(self) -> bool:
return self.p2 == self.p1 and self.q[self.p1] is None
def isFull(self) -> bool:
return self.p2 == self.p1 and self.q[self.p1] is not None
# Your MyCircularQueue object will be instantiated and called as such:
# obj = MyCircularQueue(k)
# param_1 = obj.enQueue(value)
# param_2 = obj.deQueue()
# param_3 = obj.Front()
# param_4 = obj.Rear()
# param_5 = obj.isEmpty()
# param_6 = obj.isFull()
이런 문제는 스택을 써라, 큐를 써라, 링크드 리스트를 써라 이렇게 제한을 해주는게 좋을 것 같다. 통과가 되더라도 내 풀이가 치팅인지 올바른 풀이인지 모르겠다.
일반적으로는 스택으로 구현한다고 한다.