본문 바로가기
Algorithm/leetcode

[leetcode]1381. Design a Stack With Increment Operation

by 세류오 2023. 9. 1.

LeetCode - The World's Leading Online Programming Learning Platform

 

Design a Stack With Increment Operation - LeetCode

Can you solve this real interview question? Design a Stack With Increment Operation - Design a stack that supports increment operations on its elements. Implement the CustomStack class: * CustomStack(int maxSize) Initializes the object with maxSize which i

leetcode.com

문제 이해

■ CustomStack(int maxSize)

  • maxSize만큼 스택 최대 사이즈를 정의한다

■ void push(int x)

  • x값을 push한다. maxSize를 초과해서 push되지 않는다

■ int pop()

  • pop을 실행, stack이 비어있다면 -1을 return

■ void inc(int k, int val)

  • stack의 데이터에 k개만큼 val을 더해준다 ex) inc(int 2, int 100) ⇒ 0~1번 stack데이터에 100을 더해준다

■ 문제풀이

배열을 사용하여 처음 stack을 배울 때 처럼 차근차근 풀어 주었다.

🤔 나의 실수

요즘 문제를 풀면서 ArrayList를 많이 사용했는데 inc실행 시 st.add(i, st.get(i)+val)을 실행 하지만 ArrayList는 add를 실행할 때 이미 자리에 값이 존재하는 경우 값을 없애고 들어가는 것이 아닌 자리를 한칸씩 밀어내고 add해 주는 것이였다.

EX) st.add(0, 1); → [1] st.add(0, 100); → [100, 1]

int[]으로 풀이

class CustomStack {

    private int[] st;
    private int top = -1;
    private int stSize;

    public CustomStack(int maxSize) {
        st = new int[maxSize];
        stSize = maxSize;
    }
    
    public void push(int x) {
        if(top == stSize-1){
            return;
        } 
        top++;
        st[top] = x;  
    }
    
    public int pop() {
        if(top == -1) {
            return -1;
        } 
        int val = st[top];
        top--;
        return val;        
    }
    
    public void increment(int k, int val) {
        for(int i = 0; i < k && i <= top; i++){
            st[i] += val;
        }
    }
}

ArrayList로 풀이

class CustomStack {

    private ArrayList<Integer> st;
    private int top = -1;
    private int stSize;

    public CustomStack(int maxSize) {
        st = new ArrayList<>();
        stSize = maxSize;
    }
    
    public void push(int x) {
        if(top == stSize-1){
            return;
        } 
        top++;
        st.add(top, x);
    }
    
    public int pop() {
        if(top == -1) {
            return -1;
        } 
        int val = st.get(top);
        st.remove(top);
        top--;
        return val;        
    }
    
    public void increment(int k, int val) {
        for(int i = 0; i < k && i <= top; i++){
            int num = st.get(i) +val;
            st.remove(i);
            st.add(i, num);
        }
    }
}