[LeetCode] 155. Min Stack

lkdcode·2023년 8월 31일

Algorithm

목록 보기
19/47
post-thumbnail

155. Min Stack


문제 분석

현재 스택에 최솟값을 가지고 있는 스택 자료구조를 구현하는 문제


풀이 과정

최솟값의 기준은 현재 스택에 있는 값들을 기준으로 한다.
pop() 을 통해 값이 빠져나갈 때를 생각해야 한다.

push() 를 통해 스택에 값을 저장할 때 마다 조건문으로 최솟값을 확인한다.
이때 최솟값이 갱신되면 현재 최솟값과 이전 최솟값을 스택에 넣는다. (이후 pop() 로직에서 갱신을 위한 로직)

pop() 을 통해 스택에 값을 뺄 때 마다 조건문으로 최솟값과 비교를 한다.
만약 현재 pop() 한 값이 최솟값과 같다면, 최솟값을 pop() 한 값으로 갱신해준다.

이렇게 pop() 을 2번 하는 로직을 통해 계속 최솟값을 유지할 수 있다.


나의 생각

스택에 이미 구현되어 있는 메서드들과 크게 다른 메서드가 없어서 최솟값을 어떻게 기록하는 지 고민을 했었다.
이 문제도 결국 스택이 가지고 있는 특성을 이용하면 될 것 같았고 후입선출에 대한 개념을 이용하여 풀 수 있었다.


코드

class MinStack {
    Stack<Integer> stack = new Stack<>();
    int min = Integer.MAX_VALUE;

    public MinStack() {
        this.stack = new Stack<Integer>();
    }
    
    public void push(int val) {
        if (val <= min) {
            stack.push(min);
            min = val;
        }
        stack.push(val);
    }
    
    public void pop() {
        if (stack.pop() == min) min = stack.pop();
    }
    
    public int top() {
        return stack.peek();
    }
    
    public int getMin() {
        return min;
    }
}

profile
되면 한다

0개의 댓글