๋์ด๋: 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 |