Leetcode Java Implement Queue using Stacks
업데이트:
문제
코드
class MyQueue {
private Stack<Integer> input;
private Stack<Integer> output;
public MyQueue() {
this.input = new Stack<>();
this.output = new Stack<>();
}
public void push(int x) {
this.input.push(x);
}
public int pop() {
this.move();
return this.output.pop();
}
public int peek() {
this.move();
return this.output.peek();
}
public boolean empty() {
return this.input.empty() && this.output.empty();
}
private void move() {
if (this.output.empty()) {
while (!this.input.empty()) {
this.output.push(this.input.pop());
}
}
}
}
/**
* Your MyQueue object will be instantiated and called as such:
* MyQueue obj = new MyQueue();
* obj.push(x);
* int param_2 = obj.pop();
* int param_3 = obj.peek();
* boolean param_4 = obj.empty();
*/
결과
설명
- 지난 Implement Stack using Queues와 반대되는 문제로, Stack 2개를 사용하여 FIFO의 queue와 같은 MyQueue 클래스를 완성하는 문제이다.
- 메서드인 push(int x)는 x를 받아 queue에 넣어준다.
- 메서드인 pop()은 queue의 맨 앞에 있는 값을 꺼내 반환한다.
- 메서드인 peek()는 queue의 맨 앞에 있는 값을 반환한다.
- 메서드인 empty()는 queue가 비어있는지 여부를 반환한다.
- 문제 풀이에 필요한 변수를 정의한다.
- input은 값이 들어오면 들어갈 stack이다.
- output은 값이 들어온 MyQueue의 값을 반환하기 위한 stack이다.
- 주어진 생성자인 MyQueue()를 완성한다.
- input과 output에 Stack으로 초기화 시켜준다.
- 주어진 메서드인 push(int x)를 완성한다.
- input에 주어진 x 값을 넣어준다.
- 주어진 메서드인 pop()과 peek()를 사용하기 전에 input의 값을 output으로 이동하기 위한 move() 메서드를 완성한다.
- output이 비어있을 경우, input의 값들을 모두 꺼내서 output에 넣어 역순으로 정렬시켜준다.
- stack의 경우 LIFO이기 때문에, input에 있는 값을 output에 넣으면 거꾸로 쌓이게 되어 Queue와 같이 순차적으로 FIFO와 같은 효과를 낼 수 있다.
- 주어진 메서드인 pop()을 완성한다.
- 5번에서 정의한 move() 메서드를 수행하여 값을 역순으로 정렬한다.
- output에 있는 가장 위의 값을 꺼내서 반환한다.
- 주어진 메서드인 peek()를 완성한다.
- 5번에서 정의한 move() 메서드를 수행하여 값을 역순으로 정렬한다.
- output에 있는 가장 위의 값을 반환한다.
- 주어진 메서드인 empty()를 완성한다.
- input과 output 두 개의 stack이 모두 비어있는지 여부를 반환한다.
- input으로 들어온 값을 output에서 다 쓴 경우, 남아있는 값이 없으므로 비어있다고 볼 수 있다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기