Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

개발 일지

225. Implement Stack using Queues (큐를 사용하여 스택 구현) 본문

코딩 테스트/LeetCode

225. Implement Stack using Queues (큐를 사용하여 스택 구현)

포카리tea 2023. 4. 3. 16:13

두 개의 대기열만 사용하여 후입선출(LIFO) 스택을 구현합니다. 구현된 스택은 일반 스택의 모든 기능(push, top, pop 및 empty)을 지원해야 합니다.

MyStack 클래스를 구현합니다.

void push(int x) 요소 x를 스택 맨 위로 푸시합니다.
int pop() 스택의 맨 위에 있는 요소를 제거하고 반환합니다.
int top() 스택의 맨 위에 있는 요소를 반환합니다.
boolean empty() 스택이 비어 있으면 true를 반환하고 그렇지 않으면 false를 반환합니다.

노트:

대기열의 표준 작업만 사용해야 합니다. 즉, 뒤로 밀기, 앞에서 보기/팝, 크기 및 비어 있는 작업만 유효합니다.
언어에 따라 대기열이 기본적으로 지원되지 않을 수 있습니다. 대기열의 표준 작업만 사용하는 한 목록 또는 deque(양단 대기열)를 사용하여 대기열을 시뮬레이션할 수 있습니다.

 

예시 1:

입력:
["MyStack", "push", "push", "top", "pop", "empty"]
[[], [1], [2], [], [], []]
출력:
[null, null, null, 2, 2, false]

설명:
MyStack myStack = new MyStack();
myStack.push(1);
myStack.push(2);
myStack.top(); // 2 반환
myStack.pop(); // 2 반환
myStack.empty(); // 거짓 반환

 

조건:

  • 1 <= x <= 9
  • 대부분의 호출은 , , 및 100에 이루어집니다 .pushpoptopempty
  • pop및 에 대한 모든 호출이 top유효합니다.

 

정답:

public class MyStack {
    private Queue<int> queue = new Queue<int>();

    public MyStack() {
        
    }
    
    public void Push(int x) {
        queue.Enqueue(x);
        for (int i = 1; i < queue.Count; i++)
        {
            queue.Enqueue(queue.Dequeue());
        }
    }
    
    public int Pop() {
        return queue.Dequeue();
    }
    
    public int Top() {
        return queue.Peek();
    }
    
    public bool Empty() {
        return queue.Count == 0;
    }
}

해설: 

큐의 길이가 2가 넘어갔을때부터는 Stack의 일을 해줄 수 없기 때문에 제거 후 그 수를 다시 넣어주는 방식을 반복하여 Stack의 일을 해줄 수 있도록 하였습니다.