여기에서 우리는 푸시, 팝, 탑을 수행하고 최소 요소를 일정한 시간에 검색할 수 있는 스택을 만드는 방법을 볼 것입니다. 따라서 함수는 push(x), pop(), top() 및 getMin()이 됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
- 최소 요소로 스택을 무한대로 초기화
- 푸시 작업용 push(x)
- x
- x를 스택에 푸시
- x
- 팝 작업의 경우 pop()
- t :=상단 요소
- 스택에서 t 삭제
- t가 min이면 min :=스택의 최상위 요소
- 최상위 작업용 top()
- 최상위 요소를 반환하기만 하면 됩니다.
- getMin 작업의 경우 getMin()
- 최소 요소 반환
예
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
class MinStack(object): min=float('inf') def __init__(self): self.min=float('inf') self.stack = [] def push(self, x): if x<=self.min: self.stack.append(self.min) self.min = x self.stack.append(x) def pop(self): t = self.stack[-1] self.stack.pop() if self.min == t: self.min = self.stack[-1] self.stack.pop() def top(self): return self.stack[-1] def getMin(self): return self.min m = MinStack() m.push(-2) m.push(0) m.push(-3) print(m.getMin()) m.pop() print(m.top()) print(m.getMin())
입력
m = MinStack() m.push(-2) m.push(0) m.push(-3) print(m.getMin()) m.pop() print(m.top()) print(m.getMin())
출력
-3 0 -2