LeetCode 솔루션					분류
				
						[5/5] 225. Implement Stack using Queues
본문
[LeetCode 시즌 3] 2022년 5월 5일 문제입니다.
https://leetcode.com/problems/implement-stack-using-queues/
[Easy] 225. Implement Stack using Queues
Implement a last-in-first-out (LIFO) stack using only two queues. The implemented stack should support all the functions of a normal stack (push, top, pop, and empty).
Implement the MyStack class:
- void push(int x)Pushes element x to the top of the stack.
- int pop()Removes the element on the top of the stack and returns it.
- int top()Returns the element on the top of the stack.
- boolean empty()Returns- trueif the stack is empty,- falseotherwise.
Notes:
- You must use only standard operations of a queue, which means that only push to back,peek/pop from front,sizeandis emptyoperations are valid.
- Depending on your language, the queue may not be supported natively. You may simulate a queue using a list or deque (double-ended queue) as long as you use only a queue's standard operations.
Example 1:
Input ["MyStack", "push", "push", "top", "pop", "empty"] [[], [1], [2], [], [], []] Output [null, null, null, 2, 2, false] Explanation MyStack myStack = new MyStack(); myStack.push(1); myStack.push(2); myStack.top(); // return 2 myStack.pop(); // return 2 myStack.empty(); // return False
Constraints:
- 1 <= x <= 9
- At most 100calls will be made topush,pop,top, andempty.
- All the calls to popandtopare valid.
Follow-up: Can you implement the stack using only one queue?
관련자료
- 
			링크
			댓글 3
					
			mingki님의 댓글
- 익명
- 작성일
					
										
					C++
Runtime: 0 ms, faster than 100.00% of C++ online submissions for Implement Stack using Queues.
Memory Usage: 6.7 MB, less than 88.02% of C++ online submissions for Implement Stack using Queues.
				
													
								Runtime: 0 ms, faster than 100.00% of C++ online submissions for Implement Stack using Queues.
Memory Usage: 6.7 MB, less than 88.02% of C++ online submissions for Implement Stack using Queues.
class MyStack {
private:
    queue<int> q;
    
public:
    MyStack() {
        
    }
    
    void push(int x) {
        q.push(x);
    }
    
    int pop() {
        int n = q.size();
        
        for (int i = 0; i < n - 1; ++i) {
            q.push(q.front()); q.pop();
        }
        int res = q.front(); q.pop();
        return res;
    }
    
    int top() {
        int n = q.size();
        int res = 0;
        
        for (int i = 0; i < n; ++i) {
            res = q.front(); q.pop();
            q.push(res);
        }
        return res;
    }
    
    bool empty() {
        return q.empty();
    }
};austin님의 댓글
- 익명
- 작성일
class MyStack {
public:
    MyStack() {
        
    }
    
    void push(int x) {
        q1.emplace(x);
    }
    
    int pop() {
        while(q1.size() > 1) {
            q2.emplace(q1.front());
            q1.pop();
        }
        int ret = q1.front();
        q1.pop();
        swap(q1, q2);
        return ret;        
    }
    
    int top() {
        while(q1.size() > 1) {
            q2.emplace(q1.front());
            q1.pop();
        }
        int ret = q1.front();
        q1.pop();
        q2.emplace(ret);
        swap(q1, q2);
        return ret;        
    }
    
    bool empty() {
        return q1.empty();
    }
    queue<int> q1;
    queue<int> q2;
};나무토끼님의 댓글
- 익명
- 작성일
					
										
					Runtime: 65 ms, faster than 5.63% of Python3 online submissions for Implement Stack using Queues.
Memory Usage: 14.1 MB, less than 27.76% of Python3 online submissions for Implement Stack using Queues.
				
													
								Memory Usage: 14.1 MB, less than 27.76% of Python3 online submissions for Implement Stack using Queues.
class MyStack:
    def __init__(self):
        self.queue = collections.deque()
        self.temp = collections.deque()
    def push(self, x: int) -> None:
        if self.empty():
            self.queue.append(x)
        else:
            while self.queue:
                self.temp.append(self.queue.popleft())
            self.queue.append(x)
            while self.temp:
                self.queue.append(self.temp.popleft())
    def pop(self) -> int:
        return self.queue.popleft()
    def top(self) -> int:
        return self.queue[0]
    def empty(self) -> bool:
        if len(self.queue) == 0:
            return True
        else:
            return False 
								 
							







