본문 바로가기
Algorithm/leetcode

[leetcode] 155.Min Stack

by 세류오 2023. 8. 26.

https://leetcode.com/problems/min-stack/description/

 

Min Stack - LeetCode

Can you solve this real interview question? Min Stack - Design a stack that supports push, pop, top, and retrieving the minimum element in constant time. Implement the MinStack class: * MinStack() initializes the stack object. * void push(int val) pushes t

leetcode.com

 

문제 이해

MinStack을 디자인

Stack과 모든게 동일하지만

getMin()을 호출 시 stack에 담겨있는 값 중 가장 최소값을 반환해야 한다.

 

 

- Stack함수를 이용한 풀이

class MinStack {

        private Stack<Integer> data;
        private Stack<Integer> minData;
        
        public MinStack() {
            data = new Stack<>();
            minData = new Stack<>();
        }

        public void push(int val) {
            data.add(val);
            if(minData.isEmpty()){
                minData.add(val);
            } else {
                int min = minData.peek();
                minData.add(min <= val ? min : val);
            }
        }

        public void pop() {
            if(!data.isEmpty()){
                data.pop();
                minData.pop();
            }
        }

        public int top() {
            return data.peek();
        }

        public int getMin() {
            return minData.peek();
        }
}

 

 

- ArrayList를 사용한 풀이

class MinStack {

        private ArrayList<Integer> data;
        private ArrayList<Integer> minData;
        private int top;
        private int minTop;

        public MinStack() {
            data = new ArrayList<>();
            minData = new ArrayList<>();
            top = -1;
            minTop = -1;
        }

        public void push(int val) {
            top++;
            data.add(top, val);

            if(minTop == -1){
                minTop++;
                minData.add(minTop, val);
            } else {
                int min = minData.get(minTop);
                minTop++;
                minData.add(minTop, min <= val ? min : val);
            }
        }

        public void pop() {
            if(top > -1){
                top--;
                minTop--;
            }
        }

        public int top() {
            return data.get(top);
        }

        public int getMin() {
            return minData.get(minTop);
        }
}

 

 

 

아직 많이 어설픈 것 같고

ArrayList를 이용하는것은 이도저도 아닌상태로 풀게 된 것 같다.