아래는 최초 내가 풀었던 방법이다.
def solution(prices):
# answer의 초기값을 설정한다. 예를 들어 length가 5인 list가 parmeter로 전달된다면,
# [4,3,2,1,0]
answer = [len(prices)-i-1 for i in range(len(prices))]
#이전 값을 저장할 stack, idx 생성
stack, idx = [],[]
for time, price in enumerate(prices) :
# stack이 빈 리스트가 아니며 and price가 stack[-1]보다 작으면 아래의 while문을 실행한다.
while stack and stack[-1] > price:
#stack의 [-1]요소 제거
stack.pop()
#idx의 [-1]요소를 idx에서 제거 후, answer_idx에 할당.
answer_idx = idx.pop()
#answer_idx를 이용하여 time과의 시간적 거리를 계산 후, answer에서 해당 값을 대체.
answer[answer_idx] = time - answer_idx
#기본적인 과정임. stack과 idx에 각각 price/time을 쌓음
stack.append(price)
idx.append(time)
return answer
그러나 불필요한 부분이 있었다.
이 바로 그것이다.
굳이 그럴 필요가 없었다.
왜냐하면 parameter로 들어오는 list 자체의 순서를 바꾸지 않았으므로
prices[idx]
로 바로 접근하면 되는 것이었다.
따라서, stack에 price가 아닌, idx를 쌓는 것으로 바꿔주었다.
def solution(prices):
answer = [len(prices)-i-1 for i in range(len(prices))]
stack=[]
for time, price in enumerate(prices) :
while stack and prices[stack[-1]] > price:
answer_idx = stack.pop()
answer[answer_idx] = time - answer_idx
stack.append(time)
return answer