자료구조,알고리즘
LeetCode-155 MinStack 파이썬 풀이
mileh
2023. 9. 1. 04:29
문제
스택을 구현하는 간단한 문제입니다. __init__ 에선 stack의 초기화를 push에선 stack에 데이터 추가를, pop에선 stack의 맨 위에 값을 제거하도록 구현해야 합니다. top에선 stack의 맨 위에 값을 반환하고, getMin에선 현재 stack의 데이터 중 가장 작은 값을 반환하면 됩니다.
풀이
1. __init__
stack으로 쓰일 배열과, 스택의 가장 상단 인덱스를 의미하는 topV를 초기화합니다. topV는 아직 stack에 입력된 값이 없기에 -1로 설정합니다.
2. push
stack안에 데이터를 push할 때마다 top을 +1 합니다.
+1한 인덱스의 위치에 데이터를 저장합니다.
3. pop
stack의 상단의 데이터를 제거해야하므로 top이 -1이 아닌 경우에만 진행합니다. (빈 stack 이 아닌 경우)
stack의 가장 마지막 데이터를 제거하고 top의 크기도 -1 합니다.
4. top
stack의 가장 상단의 데이터를 반환합니다. top이 가장 마지막으로 입력된 데이터의 인덱스를 의미하고 있기 때문에 top 인덱스의 데이터를 stack에서 반환하면 됩니다. 마찬가지로 top이 -1인 경우에는 빈 stack이기 때문에 None을 반환합니다.
5. getMin
이 경우 역시 stack이 빈 경우에는 None을 반환하고 파이썬 min 함수를 활용하여 가장 작은 수를 반환합니다.
class MinStack:
def __init__(self):
self.stack = []
self.topV = -1
def push(self, val: int) -> None:
self.topV += 1
self.stack.append(val)
def pop(self) -> None:
if self.topV >= 0 :
self.stack.pop()
self.topV -= 1
def top(self) -> int:
if self.topV == -1:
return None
return self.stack[self.topV]
def getMin(self) -> int:
if self.topV == -1:
return None
return min(self.stack)