์šฐ๊ทœ์ด์ธ์šฐ์œค
Eager To Learn ๐ŸŒŒ
์šฐ๊ทœ์ด์ธ์šฐ์œค
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ๐Ÿก ํ™ˆ
  • ๐Ÿš€ ๊นƒํ—ˆ๋ธŒ
  • โ›… ํƒœ๊ทธ ํด๋ผ์šฐ๋“œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (217)
    • ๐Ÿ‘จ๐Ÿป‍๐Ÿ’ป PS (170)
      • JAVA (82)
      • MYSQL (1)
      • Docker (2)
      • PYTHON (24)
      • LeetCode 150 (39)
      • Algorithm ๊ธฐ๋ฒ• (1)
      • ๋ฐ”ํ‚น๋… (21)
    • ๋ธ”๋กœ๊ทธ ์ด์‚ฌ (0)
    • Error (1)
    • CS (15)
      • DataBase (2)
      • OS (7)
      • Network (1)
      • Spring (1)
      • ์ž๋ฃŒ๊ตฌ์กฐ (3)
      • Java (1)
    • Learned (7)
      • Spring (7)
    • ๊ฐœ๋ฐœ์„œ์  (15)
      • ๊ฐ€์ƒ ๋ฉด์ ‘ ์‚ฌ๋ก€๋กœ ๋ฐฐ์šฐ๋Š” ๋Œ€๊ทœ๋ชจ ์‹œ์Šคํ…œ ์„ค๊ณ„ ๊ธฐ์ดˆ (1)
      • ์˜ค๋ธŒ์ ํŠธ - ์กฐ์˜ํ˜ธ (7)
      • ์นœ์ ˆํ•œ SQL ํŠœ๋‹ (7)
    • ํšŒ๊ณ  (2)
hELLO ยท Designed By ์ •์ƒ์šฐ.
์šฐ๊ทœ์ด์ธ์šฐ์œค

Eager To Learn ๐ŸŒŒ

๐Ÿ‘จ๐Ÿป‍๐Ÿ’ป PS/LeetCode 150

[Java] 155. Min Stack

2023. 8. 30. 09:04

๋ฌธ์ œ ํŒŒ์•…

O(1) ์‹œ๊ฐ„ ๋ณต์žก๋„๋กœ ํ•ด๋‹น ๋ฉ”์„œ๋“œ ๋“ค์„ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌํ˜„ํ•ด์•ผํ•œ๋‹ค.

 


ํ’€์ด

 

1๏ธโƒฃ Stack ํด๋ž˜์Šค ์ด์šฉ

์œ„ ๋ฌธ์ œ์—์„œ, ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋ฉ”์„œ๋“œ๋Š” getMin() ๋ฉ”์„œ๋“œ์ด๋‹ค.

 

๋‹ค๋ฅธ, push(), pop(), top() ๋ฉ”์„œ๋“œ๋Š” ๊ธฐ์กด Stack ํด๋ž˜์Šค์—์„œ๋„ O(1) ์— ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

๋”ฐ๋ผ์„œ, ์Šคํƒ์— ์š”์†Œ๋ฅผ ์‚ฝ์ž…ํ•  ๋•Œ, ์ตœ์†Ÿ๊ฐ’์„ ์ €์žฅํ•˜๊ณ  getMin() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ๋ฐ”๋กœ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์•ผ O(1)์„ ๋งŒ์กฑํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

 

์ตœ์†Ÿ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ์Šคํƒ์„ ๋”ฐ๋กœ ์ถ”๊ฐ€ํ•ด์„œ, ๊ฐ’์„ push ํ• ๋•Œ๋งˆ๋‹ค ํ•ด๋‹น ์œ„์น˜์˜ ์Šคํƒ ๊ฐ’๊นŒ์ง€์˜ ์ตœ์†Ÿ๊ฐ’์„ ๊ธฐ๋กํ•˜๋„๋ก ๊ตฌํ˜„ํ•˜์˜€๋‹ค.

 

import java.util.*;
class MinStack {

    Stack<Integer> stack;
    Stack<Integer> stackForMin;

    public MinStack() {
        stack = new Stack<>();
        stackForMin = new Stack<>();
    }
    
    public void push(int val) {
        stack.push(val);
        if(stackForMin.isEmpty()){
            stackForMin.push(val);
        }else{
            stackForMin.push(Math.min(val,stackForMin.peek()));
        }
    }
    
    public void pop() {
        stack.pop();
        stackForMin.pop();
    }
    
    public int top() {
        return stack.peek();
    }
    
    public int getMin() {
        return stackForMin.peek();
    }
}

 

๊ฒฐ๊ณผ

 

2๏ธโƒฃ ๋ฐฐ์—ด๊ณผ ํฌ์ธํ„ฐ๋ฅผ ์ด์šฉํ•œ ๋ฐฉ์‹

์ž๋ฐ”์—์„œ ์ œ๊ณตํ•˜๋Š” ์Šคํƒ ํด๋ž˜์Šค๊ฐ€ ์•„๋‹Œ ๋ฐฐ์—ด๊ณผ ํฌ์ธํ„ฐ๋ฅผ ์ด์šฉํ•ด์„œ ๊ตฌํ˜„ํ•ด๋ณด์•˜๋‹ค.

 

์ตœ๋Œ€ 30000๋ฒˆ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค๊ณ  ํ•˜์˜€์œผ๋ฏ€๋กœ, ๋ฐฐ์—ด์˜ ํฌ๊ธฐ๋ฅผ 30001๋กœ ์„ค์ •ํ•œ ๋’ค

 

push, pop์— ๋”ฐ๋ผ pointer๋ฅผ ๋ณ€๊ฒฝ์‹œ์ผœ์ฃผ๋Š” ๋ฐฉ์‹์ด๋‹ค.

 

์ตœ์†Ÿ๊ฐ’์„ ์œ ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ 1๋ฒˆ ํ’€์ด์™€ ๋™์ผํ•œ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ–ˆ๋‹ค.

 

class MinStack {
    int[] stack;
    int[] stackForMin;
    int pointer = -1;

    public MinStack() {
        stack = new int[30001];
        stackForMin = new int[30001];
    }
    
    public void push(int val) {
        pointer++;
        stack[pointer] = val;

        if(pointer==0){
            stackForMin[pointer] = val;
        }else{
            stackForMin[pointer] = Math.min(stackForMin[pointer-1],val);
        }

    }
    
    public void pop() {
        pointer--;
    }
    
    public int top() {
        return stack[pointer];
    }
    
    public int getMin() {
        return stackForMin[pointer];
    }
}

 

๊ฒฐ๊ณผ

 

์Šคํƒ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•œ ๋ฐฉ์‹๋ณด๋‹ค ๋‚ฎ์€ ๋ฉ”๋ชจ๋ฆฌ์™€ ๋น ๋ฅธ ์‹คํ–‰ ์‹œ๊ฐ„์ด ๋˜์—ˆ๋‹ค.

 


๐Ÿ“– ํšŒ๊ณ 

์Šคํƒ์—์„œ ๊ฐ€์žฅ ์ตœ์†Ÿ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋ผ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ผ๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์„ ๊ฒƒ์ด๋ผ๊ณ  ์ƒ์ƒํ•˜์ง€ ๋ชปํ–ˆ๋‹ค.

 

ํ•˜์ง€๋งŒ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐ•์˜ ๋•Œ, ๋“ค์—ˆ๋˜ ์•„์ด๋””์–ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

    '๐Ÿ‘จ๐Ÿป‍๐Ÿ’ป PS/LeetCode 150' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [Java] 1. Two Sum
    • [Java] 150. Evaluate Reverse Polish Notation
    • [Java] 74. Search a 2D Matrix
    • [Java] 35. Search Insert Position
    ์šฐ๊ทœ์ด์ธ์šฐ์œค
    ์šฐ๊ทœ์ด์ธ์šฐ์œค
    ๊ฐœ๋ฐœ์ž ๊ฟˆ๋‚˜๋ฌด

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”