algorithm/Structures
[프로그래머스/Lv2] 주식가격 - Python
ayeongjin
2025. 3. 28. 15:05
https://school.programmers.co.kr/learn/courses/30/lessons/42584
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
비슷한 문제로 백준에서 17298번 오큰수 풀었던 기억이 났다.
그때도 스택으로 풀었던 거 같아서 이번에도 스택으로 풀어보려고 했는데 꽤 시간이 걸렸다.
오큰수는 배열을 거꾸로 순회하면서 스택에 int 하나만 저장하고 오큰수가 될 수 없는 값을 pop 하면서 풀이했는데,
이 문제는 주식가격 유지 시간을 구해야했기 때문에 순서대로 순회하면서 가격과 idx를 튜플로 스택에 append했다.
# 스택
def solution(prices):
n = len(prices)
# 초기 answer : 가격이 떨어지지 않았을 경우로 초기화
answer = [i for i in range(n - 1, -1, -1)]
stack = []
for j in range(n):
# 스택에 이전 주식이 남아있을 경우
while stack:
# 현재 주식보다 가격이 클 경우 (스택에 남아있는 주식이 현재 시점에 떨어지는 경우)
if stack[-1][0] > prices[j]:
# 스택에서 제거 후, 떨어진 시간 계산하여 answer 갱신
price, idx = stack.pop()
answer[idx] = j - idx
else:
break
stack.append((prices[j], j))
return answer