이 문제에서 구현하고자 하는 MinStack은 필요할 때 요소 내 최솟값을 조회하고자 하는 커스텀 클래스이다.

  1. stack을 구현하며 min 배열을 통해 현재 최솟값을 기록할 배열을 추가함
  2. 배열 요소가 push 될 때 현재 최솟값을 같이 계속 누적함. 즉 현재 요소의 인덱스에서의 최솟값을 언제든 O(1)의 시간으로 알 수 있음
  3. 필요할 때 최솟값 반환하도록 클래스 완성

😎풀이

class MinStack {
    private min
    private stack
    constructor() {
        this.min = []
        this.stack = []
    }

    push(val: number): void {
        let curMin = this.min.at(-1) ?? Number.MAX_SAFE_INTEGER
        if(val < curMin) curMin = val
        this.min.push(curMin)
        this.stack.push(val)
    }

    pop(): void {
        this.min.pop()
        this.stack.pop()
    }

    top(): number {
        return this.stack.at(-1)
    }

    getMin(): number {
        return this.min.at(-1)
    }
}
profile
내 지식을 공유할 수 있는 대담함

0개의 댓글