[알고리즘] Leetcode_225_Implement_Stack_using_Queues

jeongjwon·2023년 4월 5일
0

알고리즘

목록 보기
20/48

Problem

Solve

class MyStack {
 Queue<Integer> queue = new LinkedList<>();

    public MyStack() {
        
    }
    
    public void push(int x) {
        queue.add(x);
    }
    
    public int pop() {
        int size = queue.size();
        for(int i = 0 ; i < size-1; i++){
            queue.add(queue.poll());
        }
        int value = queue.poll();
        return value;
    }
    
    public int top() {
        int size = queue.size();
        for(int i = 0 ; i < size-1; i++){
            queue.add(queue.poll());
        }
        int value = queue.poll();
        queue.add(value);
        return value;
        
    }
    
    public boolean empty() {
        return queue.isEmpty();
        
    }
}

거꾸로 생각하면 되는데, pop과 top에서 반복되는 것들이 많기 때문에 stack을 이용해 queue를 구현하는 것처럼 push에서 한 작업만 하면 pop,top에서 한 줄 코드로 값을 반환할 수 있다.
따라서 queue는 앞에서만 poll 혹은 remove 를 할 수 있으므로 stack처럼 구현이 되기 위해서는 거꾸로 pushf를 해주어야 한다.

class MyStack {
 Queue<Integer> queue = new LinkedList<>();

    public MyStack() {
        
    }
    
    public void push(int x) {
        queue.add(x);
        for(int i = 0 ; i < queue.size()-1 ; i++){
        	queue.add(queue.poll());
        }
        //이미 추가해준 값 빼고 원래 기존에 들어있던 값만 pop하고 다시 push
    }
    
    public int pop() {
        return queue.poll();
    }
    
    public int top() {
        return queue.peek();
    }
    
    public boolean empty() {
        return queue.isEmpty();
        
    }
}

0개의 댓글