- 현 시점의 가격과 스택에 저장된 가격들을 하나씩 비교하면서 현 시점의 가격이 작다면 pop 하는 방식으로 구현

- 미리 answer을 prices의 길이만큼 만들어 둔 후, 현 시점의 가격보다 스택의 값이 크다면 pop 해준다, 여기서 가격이 떨어지지 않는 기간은 현 시점의 인덱스 - 스택에 저장된 인덱스이다.

- 전체 가격을 돈 다음에는 stack에 남아있는 값들에 대한 처리를 해준다. 이때는 전체 크기 - 스택에 저장된 인덱스 - 1로 처리해주는데, 그 이유는 인덱스가 0부터 시작하기도 하고, 마지막 값은 0이 되어야 하기 때문이다.

from collections import deque

def solution(prices):
    answer = [0] * len(prices)
    stack = deque()

    for idx in range(len(prices)):
        while stack:
            if prices[stack[-1]] > prices[idx]:
                i = stack.pop()
                answer[i] = idx - i
            else:
                break

        stack.append(idx)

    while stack:
        i = stack.pop()
        answer[i] = len(prices) - i - 1

    return answer

출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges

'알고리즘[Python] > 프로그래머스' 카테고리의 다른 글

[ Lv 2 ] [1차] 캐시  (0) 2021.06.28
[ Lv 2 ] 점프와 순간 이동  (0) 2021.06.28
[ Lv 2 ] [1차] 프렌즈4블록  (0) 2021.06.27
[ Lv 2 ] 영어 끝말잇기  (0) 2021.06.27
[ Lv 2 ] 구명보트  (0) 2021.06.27

+ Recent posts