문제 설명
초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요.
제한사항- prices의 각 가격은 1 이상 10,000 이하인 자연수입니다.
- prices의 길이는 2 이상 100,000 이하입니다.
[1, 2, 3, 2, 3] | [4, 3, 1, 1, 0] |
풀이
스택을 활용하여 풀었다. 스택에 집어넣으면서, 스택 맨위값과 비교하면서 감소하면(stack[num_element-1][1] > price 상황)스택에서 pop하며 현재의 시간에서 price의 시간을 뺴서(idx - ith) 떨어지지 않은 기간을 기록한다.
for문을 다 돌고, stack에 남아있다면(주식 가격이 떨어지지 않았다면) 마지막 시간(len(price)-1)과 주식의 시간(idx)을 빼서 기록해준다.
def solution(prices):
answer =[0] * len(prices)
stack = []
num_element = 0
for idx,price in enumerate(prices) :
while stack and stack[num_element-1][1] > price :
# print(stack[num_element-1][1],"vs", price)
ith = stack[num_element-1][0]
answer[ith] = idx - ith
stack.pop()
num_element -=1
# print(stack,answer)
stack.append([idx,price])
num_element +=1
# print(idx,stack,answer)
while stack :
idx,price = stack.pop()
answer[idx] = len(prices)-1 - idx
# print(stack,answer)
return answer
728x90
반응형
'프로그래밍 > 알고리즘(PS)' 카테고리의 다른 글
[프로그래머스][python] 이중우선순위큐 (0) | 2021.12.13 |
---|---|
[백준][C++] 7662 우선순위 큐 (0) | 2021.12.07 |
[프로그래머스][python] 다리를 지나는 트럭 (0) | 2021.12.03 |
[프로그래머스][python] 프린터 (0) | 2021.12.03 |
[프로그래머스][C++] 기능개발 (0) | 2021.12.01 |