155. Min Stack
λ¬Έμ μμ½:
push(), pop(), top(), getMin()μ μ§μνλ μ€νμ λμμΈνλΌ. getMin()μ μ€ν λ΄ μ΅μ μμλ₯Ό λ°ννλ©° μμ μκ°μ μλ£λμ΄μΌ νλ€.
μκ° 1:
getMin()μ μμ μκ°μ νλ κ²μ΄ ν¬μΈνΈ. push() ν λλ§λ€ minμ μ λ°μ΄νΈ νλ κ²μ μ΄λ ΅μ§ μμ§λ§, minμ΄ pop() λ κ²½μ° μ§μ μ min κ°μΌλ‘ roll back ν΄μΌνλ€. νμ§λ§ μ§μ μ min κ°μ λ€ μ μ₯ν΄λ μκ° μμΌλ―λ‘ (벑ν°λ₯Ό μ΄μ©ν΄ μ μ₯ν΄λ μλ μκ² μ§λ§ μλ―Έκ° μλ€κ³ μκ°νμ) κ·Έλ₯ λ²‘ν° νλμ μ νλλ₯Ό μ΄μ©ν΄ ν΄κ²°ν΄μΌκ² λ€κ³ μκ°νλ€.
μκ° 2:
λ²‘ν° νλμ μ νλλ₯Ό λͺ¨λ μ°λ κ² λΉν¨μ¨μ μ΄λΌλ μκ°μ΄ λ€μ΄μ μλμ κ°μ struct Nodeλ₯Ό λ§λ€κ³ set<Node>λ₯Ό λ§λ€μ΄ ν΄κ²°ν΄μΌκ² λ€κ³ μκ°νλ€.
struct Node {
int val;
Node* prev;
};
λλ°μ μΈ νμ΄ λ°κ²¬: leetcode.com/problems/min-stack/discuss/647178/CPP-with-one-stacklessintgreater
push() ν λ minμ΄ μ λ°μ΄νΈλλ€λ©΄ μ§μ μ minμ λ¨Όμ pushνλ€. μ€νμ μμ μ μ₯ μ©λλ‘λ§ μ°λ κ² μλλΌ, μ§μ μ min μ΄λΌλ λ€λ₯Έ μ 보λ₯Ό μ μ₯νλ μ©λλ‘λ λμμ μ¬μ©νλ κ²μ΄λ€. κ·Έλ¬λ©΄ νμ¬μ minμ΄ pop() λλλΌλ push ν΄λμλ μ§μ μ minμΌλ‘ minμ roll back ν μ μλ€. κ²°κ³Όμ μΌλ‘ λ²‘ν° νλλ§ μ¬μ©νμΌλ©° μμλ₯Ό λͺ¨λ traverse νλ μ½λλ μλ€.
class MinStack {
public:
/** initialize your data structure here. */
MinStack() {
}
void push(int x) {
if(x <= min){
v.emplace_back(min);
min = x;
}
v.emplace_back(x);
}
void pop() {
if(top() == min){
v.pop_back();
min = v.back();
}
v.pop_back();
}
int top() {
return v.back();
}
int getMin() {
return min;
}
private:
vector<int> v;
int min = INT_MAX;
};
/**
* Your MinStack object will be instantiated and called as such:
* MinStack* obj = new MinStack();
* obj->push(x);
* obj->pop();
* int param_3 = obj->top();
* int param_4 = obj->getMin();
*/
'Problem Solving > Algorithm, Tips' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
Trie (Prefix tree) (0) | 2020.06.29 |
---|---|
λ€μ΄λλ―Ή νλ‘κ·Έλλ° (0) | 2020.06.24 |
μ΅λ μ°μ λΆλΆ μμ΄μ ν© (0) | 2020.06.23 |
Kruskal / Prim Algorithm (ν¬λ£¨μ€μΉΌ / νλ¦Ό μκ³ λ¦¬μ¦) (0) | 2020.06.02 |
Dijkstra Algorithm (λ€μ΅μ€νΈλΌ μκ³ λ¦¬μ¦) (0) | 2020.06.02 |
λκΈ