leetcode#225 Implement Stack using Queues

정은경·2022년 6월 21일
0

알고리즘

목록 보기
97/125

1. 문제

2. 나의 풀이

2-1. list를 이용해서 풀기

class MyStack(object):

    def __init__(self):
        self.items = []
        

    def push(self, x):
        """
        :type x: int
        :rtype: None
        """
        self.items.append(x)
        

    def pop(self):
        """
        :rtype: int
        """
        if self.empty():
            return None
        return self.items.pop()
        

    def top(self):
        """
        :rtype: int
        """
        if self.empty():
            return None
        return self.items[-1]
        

    def empty(self):
        """
        :rtype: bool
        """
        if len(self.items) > 0:
            return False
        return True
        
        


# Your MyStack object will be instantiated and called as such:
# obj = MyStack()
# obj.push(x)
# param_2 = obj.pop()
# param_3 = obj.top()
# param_4 = obj.empty()

2-2. 2개의 queue를 이용해서 풀기

from queue import Queue


class MyStack(object):

    def __init__(self):
        self.q1 = Queue()
        self.q2 = Queue()
        self.current_size = 0
        

    def push(self, x):
        """
        :type x: int
        :rtype: None
        """
        self.q1.put(x)
        self.current_size += 1
        

    def pop(self):
        """
        :rtype: int
        """
        if (self.q1.empty()):
            return
        # 한 방향 queue는 FIFO라서 queue의 get의 항상 가장 처음으로 입력한 원소임
        # 반면, stack은 LIFO라서 stack의 pop은 항상 가장 마지막으로 입력한 원소임
        # 결론, queue로 가장 마지막으로 입력한 원소를 얻으려면 원소 하나가 남아 있을 때까지 get을 해줘야함
        while (self.q1.qsize() != 1):
            self.q2.put(self.q1.get())
        
        popped_item = self.q1.get()
        self.current_size -= 1
        
        # q2는 q1의 가장 마지막으로 입력한 원소를 얻기 위해서
        # q1의 get 결과를 저장하는 임시 큐로 사용한 것이라서 아래에서 원복함
        self.q1, self.q2 = self.q2, self.q1
        
        return popped_item
        

    def top(self):
        """
        :rtype: int
        """
        if (self.q1.empty()):
            return
        # top은 가장 마지막으로 입력된 원소를 확인하는 것
        while (self.q1.qsize() != 1):
            self.q2.put(self.q1.get())
            
        top = self.q1.queue[0]
        self.q2.put(self.q1.get())

        self.q1, self.q2 = self.q2, self.q1
        
        return top
        

    def empty(self):
        """
        :rtype: bool
        """
        if self.current_size < 1:
            return True
        return False
        
        


# Your MyStack object will be instantiated and called as such:
# obj = MyStack()
# obj.push(x)
# param_2 = obj.pop()
# param_3 = obj.top()
# param_4 = obj.empty()

남의 풀이

profile
#의식의흐름 #순간순간 #생각의스냅샷

0개의 댓글