알고리즘
[LeetCode] Min Stack - Javascript
호IT
2023. 8. 30. 23:49
Min Stack
[스택 push(), pop(), top(), getMin() 구현하기]
제약 조건
nums1.length == m + n
nums2.length == n
0 <= m, n <= 200
1 <= m + n <= 200
-109 <= nums1[i], nums2[j] <= 109
Example
문제 접근 방식
문제 자체가 어렵다기보단 문제를 이해하고 어떻게 답을 리턴하는지에 대해 알아내는 데 오래 걸렸다.
또한 프로토타입에 대한 내용을 까먹어서 다시 복습도 할 겸 코딩 애플의 프로토타입 문법 영상을 한번 보고 풀었다.
스택은 배열로 초기화 했다.
우선 MinStack 객체에선 스택이 될 배열 arr을 초기화했다.
push 프로토타입: arr.push(val)로 push 기능을 구현했다.
pop 프로토타입: arr.pop(val)로 pop 기능을 구현했다.
top 프로토타입: arr 길이에 1을 감소 한 값을 리턴하고,
getmin 프로토타입: arr 배열의 최솟값을 찾아 리턴했다.
전체코드
var MinStack = function() {
this.arr = []
};
/**
* @param {number} val
* @return {void}
*/
MinStack.prototype.push = function(val) {
this.arr.push(val)
};
/**
* @return {void}
*/
MinStack.prototype.pop = function() {
this.arr.pop()
};
/**
* @return {number}
*/
MinStack.prototype.top = function() {
return this.arr[this.arr.length-1]
};
/**
* @return {number}
*/
MinStack.prototype.getMin = function() {
min = Math.min.apply(null, this.arr);
return min
};
/**
* Your MinStack object will be instantiated and called as such:
* var obj = new MinStack()
* obj.push(val)
* obj.pop()
* var param_3 = obj.top()
* var param_4 = obj.getMin()
*/
다른 sovle 코드
var MinStack = function() {
this.stack=[];
};
/**
* @param {number} val
* @return {void}
*/
MinStack.prototype.push = function(val) {
this.stack.push({
value: val,
min : this.stack.length ? Math.min(val,this.getMin()) : val
})
};
/**
* @return {void}
*/
MinStack.prototype.pop = function() {
return this.stack.pop();
};
/**
* @return {number}
*/
MinStack.prototype.top = function() {
return this.stack[this.stack.length-1].value;
};
/**
* @return {number}
*/
MinStack.prototype.getMin = function() {
return this.stack[this.stack.length-1].min;
};
/**
* Your MinStack object will be instantiated and called as such:
* var obj = new MinStack()
* obj.push(val)
* obj.pop()
* var param_3 = obj.top()
* var param_4 = obj.getMin()
*/
getMin을 구현하는 방법이 나와 달랐다.
위의 코드는 push를 할 때 객체를 하나 생성해 value와 min 키를 생성하고 값을 넣는다.
min을 math.min을 사용해 최솟값을 넣고 getmin 프로토 타입에선 min 값을 가져오기에 최솟값을 구할 수 있었다.