optional chaining ( A?.B )
: A 가 null 이나 undefined 일 경우, 중지 후 undfined 반환
nullish coalescing operator ( A ?? B)
: A가 null 혹은 undefined 일 경우 B를 반환, 아닌 경우 A를 반환
def solution(prices):
answer = [0] * len(prices)
pricesData = prices #데이터의 보존을 위해서
# LILO 구조
time = [] #시간을 저장할것
for i in range(len(prices)):
#i는 현재가격
#스택에 저장된 마지막 시간대의 가격보다 현재가격 더 작으면,
# 시간에 저장해준다.
# i=4
while time and prices[time[-1]] > prices[i]:
top = time.pop() # 유지된 마지막 시간을 꺼냄
answer[top] = i - top #유지시간을 저장 3초의 가격이 줄어들었기때문에 3초때에 저장해준다. 그러니까 price[2]는 1초 안에 떨어졌으므로, answer[2] = 3 - 2 = 1
#time 이 존재하지 않거나, 현재가격이 계속 더 크다면
# []
time.append(i)
# time 안에는 예시에 의해서, 현재 time =[0, 1, 3, 4] 가 들어가있다. answer=[0,0,1,0,0] 인 상태. //그러니까 줄어든 때만 줄어들기까지의 시간 들어가게됨.
while time:
top = time.pop()
answer[top] = len(prices)-1 - top
#그렇기때문에 time에는 가격이 올랐거나 가격이 같을때만 유지시간이 들어가게됨.
return answer