Leetcode Java Min Stack
업데이트:
문제
코드
class MinStack {
private Node node;
/** initialize your data structure here. */
public MinStack() {
}
public void push(int val) {
if (node == null) {
node = new Node(val, val, null);
} else {
node = new Node(val, Math.min(val, node.min), node);
}
}
public void pop() {
node = node.prev;
}
public int top() {
return this.node.val;
}
public int getMin() {
return this.node.min;
}
}
public class Node {
public int val;
public int min;
public Node prev;
public Node() {
}
public Node(int val, int min, Node prev) {
this.val = val;
this.min = min;
this.prev = prev;
}
}
/**
* Your MinStack object will be instantiated and called as such:
* MinStack obj = new MinStack();
* obj.push(val);
* obj.pop();
* int param_3 = obj.top();
* int param_4 = obj.getMin();
*/
결과
설명
- 아래의 메서드를 구현하는 문제이다.
- 생성자인 MinStack()은 Stack 객체를 초기화 한다.
- 메서드인 push(val)은 val을 Stack에 넣는다.
- 메서드인 pop()은 Stack의 가장 마지막 값을 제거한다.
- 메서드인 top()은 Stack의 가장 첫 값을 반환한다.
- 메서드인 getMin()은 Stack의 최솟값을 반환한다.
- 문제 풀이에 기본이 되는 Node 객체를 선언한다.
- Node는 현재 값, 최솟값, 이전 Node를 저장할 수 있다.
- 생성자를 통해 위의 기본 변수들의 값을 넣을 수 있다.
- push(val) 메서드를 구현한다.
- 전역 변수인 node가 null인 경우, 새로운 Node를 val값으로 생성하여 node에 넣어준다.
- 전역 변수인 node가 null이 아닌 경우, 새로운 Node를 전역 변수 node와 val 값, val 값과 node.min 값 중 가장 작은 값으로 생성하여 node에 넣어준다.
- pop() 메서드를 구현한다.
- 전역 변수인 node에 node.prev를 넣어 마지막 Node의 연결을 끊어준다.
- top() 메서드를 구현한다.
- 전역 변수인 node의 val 값을 반환한다.
- getMin() 메서드를 구현한다.
- 전역 변수인 node의 min 값을 반환한다.
참고
해당 문제는 요구 조건을 만족하는 Stack을 구현하는 문제로, java.util.Stack을 사용하는 것은 문제 취지에 맞지 않는 것으로 판단된다.
소스
Sample Code는 여기에서 확인 가능합니다.
댓글남기기