์ƒˆ์†Œ์‹

IN DEPTH CAKE/Supercoder

[c++/LeetCode-Stack] 155. MinStack

  • -
๋ฐ˜์‘ํ˜•

 

 

 

 

๋‚œ์ด๋„Medium

ํ‚ค์›Œ๋“œ: Stack

 

 

๋ฌธ์ œ

 

์ƒ์ˆ˜ ์‹œ๊ฐ„ ๋‚ด์— push, pop, top ๋ฐ ์ตœ์†Œ ์š”์†Œ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ์Šคํƒ์„ ์„ค๊ณ„ํ•˜์‹ญ์‹œ์˜ค.

MinStack ํด๋ž˜์Šค๋ฅผ ๊ตฌํ˜„ํ•˜์‹ญ์‹œ์˜ค:

- MinStack()๋Š” ์Šคํƒ ๊ฐ์ฒด๋ฅผ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.
- void push(int val)๋Š” ์š”์†Œ val์„ ์Šคํƒ์— ๋„ฃ์Šต๋‹ˆ๋‹ค.
- void pop()์€ ์Šคํƒ์˜ ๋งจ ์œ„์˜ ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
- int top()์€ ์Šคํƒ์˜ ๋งจ ์œ„ ์š”์†Œ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค.
- int getMin()์€ ์Šคํƒ์—์„œ ์ตœ์†Œ ์š”์†Œ๋ฅผ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ ํ•จ์ˆ˜์— ๋Œ€ํ•ด O(1) ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง„ ์†”๋ฃจ์…˜์„ ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

๋ฌธ์ œ ํ’€์ด

 

- O(1) ์‹œ๊ฐ„ ๋‚ด์— min ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด ์ถ”๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์จ์„œ min ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ min_stack์„ ์ถ”๊ฐ€๋กœ  ์„ ์–ธํ•œ๋‹ค.

- min_stack ๊ฐ’์— ์ง€๊ธˆ๊นŒ์ง€์˜ min ๊ฐ’ ๊ณผ ํ˜„์žฌ ๋“ค์–ด์˜ค๋Š” ๊ฐ’์„ ๋น„๊ตํ•ด์„œ ํ•ด๋‹น ๋ ˆ๋ฒจ์—์„œ์˜ min ๊ฐ’์„ min_stack์— ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.

 

* ์ฐธ๊ณ ๋กœ, erase๋Š” iterator๋ฅผ ๋ฐ›์•„์„œ ํ•ด๋‹น iterator์˜ ๊ฐ’์„ ์‚ญ์ œํ•ด์ฃผ๋Š” ๋ฉ”์†Œ๋“œ

* ์ฐธ๊ณ ๋กœ, end() ๋Š” iterator๋ฅผ ๋ฐ˜ํ™˜ํ•˜์ง€๋งŒ, ๋งจ ๋งˆ์ง€๋ง‰ ๊ฐ’์„ ๊ฐ€๋ฆฌํ‚ค๋Š” iterator๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ์ ์— ์œ ์˜ํ•˜์—ฌ์•ผ ํ•œ๋‹ค.

 

class MinStack {
public:
    MinStack() {
        stack = {};
        min_stack = {};
    }
    
    void push(int val) {
        stack.emplace_back(val);
        if(min_stack.size())
            min_stack.emplace_back(min(val, min_stack.back()));
        else
            min_stack.emplace_back(val);
    }
    
    void pop() {
        stack.erase(stack.end()-1);
        min_stack.erase(min_stack.end()-1);
    }
    
    int top() {
        return stack.back();
    }
    
    int getMin() {
        return min_stack.back();
    }
private:
    vector<int> stack;
    vector<int> min_stack;
};

/**
 * Your MinStack object will be instantiated and called as such:
 * MinStack* obj = new MinStack();
 * obj->push(val);
 * obj->pop();
 * int param_3 = obj->top();
 * int param_4 = obj->getMin();
 */

 

 

๋ฐ˜์‘ํ˜•

'IN DEPTH CAKE > Supercoder' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[c++/LeetCode-Stack] 394. Decode String  (1) 2024.05.05
[c++/LeetCode-Stack] 1047. Remove All Adjacent Duplicates In String  (1) 2024.05.05
[c++/LeetCode-2DArray] 48. Rotate Image  (1) 2024.05.05
[c++/LeetCode-Array] 75. Sort Colors  (3) 2024.05.05
[c++/LeetCode-Array] 56. Merge Intervals  (2) 2024.05.04
Contents

ํฌ์ŠคํŒ… ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค

์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

# ๋กœ๋”ฉ ํ™”๋ฉด ๋™์ž‘ ์ฝ”๋“œ(Code) ์„ค์ •ํ•˜๊ธฐ