과제 문제1: https://leetcode.com/problems/min-stack/
2^31 ≤ val ≤ 2^31 - 1
pop
, top
, getMin
연산은 항상 비어있지 않은 스택에서 호출됩니다.push
, pop
, top
, getMin
연산은 최대 30,000
번 호출될 수 있습니다.class MinStack:
def __init__(self):
self.stack = [] # 주 스택: 요소를 저장
self.min_stack = [] # 보조 스택: 최소값을 추적
def push(self, val: int) -> None:
self.stack.append(val)
# 보조 스택이 비어있거나, val이 현재 최소값보다 작거나 같으면 추가
if not self.min_stack or val <= self.min_stack[-1]:
self.min_stack.append(val)
def pop(self) -> None:
# 스택에서 요소를 제거할 때, 최소값과 같다면 보조 스택에서도 제거
if self.stack:
if self.stack[-1] == self.min_stack[-1]:
self.min_stack.pop()
self.stack.pop()
def top(self) -> int:
# 스택의 최상단 요소 반환
if self.stack:
return self.stack[-1]
return None # 문제의 제약 조건상 호출되지 않음
def getMin(self) -> int:
# 현재 스택의 최소값 반환
if self.min_stack:
return self.min_stack[-1]
return None # 문제의 제약 조건상 호출되지 않음
# 사용 예시:
# obj = MinStack()
# obj.push(-2)
# obj.push(0)
# obj.push(-3)
# print(obj.getMin()) # 출력: -3
# obj.pop()
# print(obj.top()) # 출력: 0
# print(obj.getMin()) # 출력: -2
push(val)
- 주 스택에 값을 추가하고, 최소값을 보조 스택에 업데이트합니다.pop()
- 최상단 요소를 제거하고, 최소값이 제거될 경우 보조 스택에서도 제거합니다.top()
- 스택의 최상단 요소를 반환합니다.getMin()
- 현재까지의 최소값을 반환합니다.