LeetCode - The World's Leading Online Programming Learning Platform
문제 이해
■ 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);
}
}
}
'Algorithm > leetcode' 카테고리의 다른 글
[leetcode]1544.Make The String Great (0) | 2023.08.31 |
---|---|
[leetcode]1074.Remove All Adjacent Duplicates In String (0) | 2023.08.30 |
[leetcode] 1614. Maximum Nesting Depth of the Parentheses (0) | 2023.08.29 |
[leetcode] 1021.Remove Outermost Parentheses (0) | 2023.08.28 |
[leetcode] 844.Backspace String compare (0) | 2023.08.27 |