초 단위로 기록된 주식의 가격을 입력받고 주식 가격이 떨어지지않은 시간은 얼마인지 구하는 문제입니다.
from collections import deque
def solution(prices):
answer = []
now = deque()
future = deque()
temp = deque()
for i in prices:
now.append(i)
answer.append(0)
future.append(now.pop())
while now:
nowPrice = now.pop()
count = 1
while True:
futurePrice = future.popleft()
temp.appendleft(futurePrice)
if futurePrice >= nowPrice:
count += 1
else:
while temp:
future.appendleft(temp.popleft())
answer.append(count)
break
if not future:
while temp:
future.appendleft(temp.popleft())
answer.append(count - 1)
break
future.appendleft(nowPrice)
answer.reverse()
return answer
코드 설명을 쓰다 보니 복잡해졌는데 now 큐에서 뒤에서부터 꺼내오면 아직 확인하지 않은 시간들중 가장 늦은 시간이 되고 future 큐에서 앞에서부터 꺼내오면 시간순으로 미래를 확인할 수 있기 때문에 현재 값과 비교해가며 언제까지 가격이 떨어지지 않는지 알 수 있습니다. 그리고 미래의 값들은 연산을 수행하며 계속해서 비교를 수행해야하기때문에 임시저장 큐에 넣어놓고 한 번의 과정이 끝날 때 미래 큐에 다시 삽입해주는 것입니다.
ps.문제를 설명하는 게 푸는것 보다 어려운 거 같네요... 문제를 풀 때 풀이 과정을 논리적으로 정리하는 법도 연습을 하면서 해봐야 할 것 같습니다.