https://school.programmers.co.kr/learn/courses/30/lessons/42584
def solution(prices):
n = len(prices)
# 1. answer를 prices 길이와 맞춘다.
answer = [0] * n
# 2. 스택 생성
stack = []
# 3. 0 ~ n-1 초까지 순회
for i in range(n):
# 1. 스택 비지 않고, prices[stack[-1]] > prices[i] 이라면 다음 반복
# 1-1. 스택에서 마지막에 저장된 시간 top 꺼냄
# 1-2. answer[top]에 i - top을 저장
while stack and prices[stack[-1]] > prices[i]:
top = stack.pop()
answer[top] = i - top
# 2. 스택에 현재 시간 i 저장
stack.append(i)
# 4. 만약 스택이 남아있다면, 스택이 빌 때까지 다음 반복
while stack:
# 1. 스택에서 마지막에 저장된 시간 top 꺼냄
# 2. answer[top]에 가장 마지막 시간 n - 1 에서 top을 뺀 시간 저장
top = stack.pop()
answer[top] = n - 1 - top
return answer
from collections import deque
def solution(prices):
answer = []
prices = deque(prices)
while prices:
sec = 0
price = prices.popleft() # 현재 값
for i in range(len(prices)):
sec += 1
if price > prices[i]: # 현재 값이 다음 값보다 클 때 = 가격이 떨어질 때
break
answer.append(sec)
return answer
효율성에서 시간초과가 났다.