초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요.
바로 for 문 돌려버렸다.
끝까지 주식 가격이 떨어지지 않은 경우만 추가로 고려하였다.
stack 을 이용했다.
def solution(p):
# 답을 넣을 ans 배열
ans = [0] * len(p)
# index를 하나씩 넣어준다.
stack = [0]
for i in range(1, len(p)):
# 만약 stack 마지막 값보다 현재 index 의 주식 가격이 적으면
if p[i] < p[stack[-1]]:
# stack 을 역으로 돌면서
for j in stack[::-1]:
# 값이 처음으로 떨어진 가격들에 대하여 시간을 계산하여 answer 에 넣어준다.
# 값이 떨어진 index 는 stack 에서 제거한다.
if p[i] < p[j]:
ans[j] = i-j
stack.remove(j)
else:
break
stack.append(i)
# 아직까지 stack 에 남아있는 값들은 마지막까지 값이 떨어지지 않은 주식가격들. 이를 계산하여 ans 에 넣어준다.
for i in range(0, len(stack)-1):
ans[stack[i]] = len(p) - stack[i] - 1
return ans
항상 for 문을 돌며 현재 idx의 주식가격보다 높은 애들을 없애준다. 즉, stack 에 있는 idx 는 그 시점보다 주식가격이 낮거나 같은 idx 들만 존재한다.