바위타는 두루미

3.2 스택 min 본문

Study/Interview준비

3.2 스택 min

DoRoMii 2019. 7. 28. 16:37
728x90

문제 

기본적인 push와 pop기능이 구현된 스택에서 최솟값을 반환하는 min함수를 추가하려고한다. 어떻게 설계할 수 있는가? push, pop, min 연산은 모두 O(1)시간에 동작해야한다. 

 

접근법

1. minValue 변수를 두고 minValue가 제거되면 다음 minValue를 탐색한다. -> push와 pop이 O(1)에 연산이 불가능

 

2. 스택에 각 상태값(minValue)를 함께 저장해두기 

class MinStack :
    def __init__(self):
        stack = []

    def push(self, num):
        if len(stack) == 0 :
            stack.append((num, num))
        else :
            cur_min = min(stack[-1][1], num)
            stack.append((num,cur_min))

    def min(self):
        return stack[-1][1]

    def pop(self):
        return stack.pop()[0]

 

3. minValue만을 저장하는 stack을 만들기 

class MinStack :
    def __init__(self):
        stack = []
        min_stack =[]
    
    def push(self, num):
        if num < min_stack[-1]:
            min_stack.append(num)
        stack.append(num)

    def min(self):
        return min_stack[-1]
    
    def pop(self):
        cur_num = stack.pop()
        if cur_num == min_stack[-1]:
            min_stack.pop()
        return cur_mum

'Study > Interview준비' 카테고리의 다른 글

3.5 스택정렬  (0) 2019.07.28
3.4 스택으로 큐  (0) 2019.07.28
2.8 루프발견  (0) 2019.07.27
2.7 교집합  (0) 2019.07.27
2.5 리스트의 합  (0) 2019.07.26
Comments