- stack은 push, pop, top 함수를 갖는다.
- get_max() 함수 작성 시, 시간복잡도를 O(n)보다 낮게 하는 방식을 생각해 보자. => max값을 위한 변수를 하나 더 만들어야 한다.
- assert로 유닛테스트를 실행하자.
class custom_stack:
def __init__(self):
self.stack = []
self.max_stack = []
def push(self, v):
self.stack.append(v)
if len(self.max_stack) == 0 or v > self.max_stack[-1]:
self.max_stack.append(v)
def pop(self):
if self.stack[-1] in self.max_stack:
self.max_stack.pop()
self.stack.pop()
def top(self):
return self.stack[-1]
def get_max(self):
return self.max_stack[-1]
cs = custom_stack()
cs.push(1)
assert cs.stack==[1]
cs.push(2)
assert cs.stack==[1,2]
cs.push(3)
assert cs.stack==[1,2,3]
cs.pop()
assert cs.stack==[1,2]
assert cs.top()==2
assert cs.get_max()==2