반응형
https://programmers.co.kr/learn/courses/30/lessons/42584
def solution(prices):
answer = [0] * len(prices) # 모두 0으로 만듬
# 가격이 떨어지지 않은 기간 계산
for i in range(0, len(prices)-1):
for j in range(i+1, len(prices)):
if prices[i] > prices[j]:
answer[i] = j - i
break
else:
answer[i] = j -i
return answer
이 문제가 스택문제이긴한데 굳이 스택을 사용하지 않아도 풀 수 있어서 저는 스택을 사용하지 않았습니다! 이중 for문을 돌면서 가격이 떨어지지 않은 기간을 계산해주었습니다. if문을 통해 가격이 떨어지면 기간(j - i)를 answer에 저장했고 break를 하여 다음 i로 넘어가게 했습니다. 어차피 마지막 요소는 항상 0이기 때문에 for문은 (마지막-1) 까지만 돌게 했습니다.
이 코드는 스택으로 푼 코드입니다. 스택으로 풀면 시간 효율성이 더 좋아지는 것 같습니다!
def solution(prices):
answer = [0]*len(prices)
stack = []
for i, price in enumerate(prices):
#stack이 비었이면 false
while stack and price < prices[stack[-1]]:
j = stack.pop()
answer[j] = i - j
stack.append(i)
# for문 다 돌고 Stack에 남아있는 값들 pop
while stack:
j = stack.pop()
answer[j] = len(prices) - 1 - j
return answer
출처: https://deftkang.tistory.com/175 [deftkang의 IT 블로그]
반응형
'Algorithm > 프로그래머스' 카테고리의 다른 글
[프로그래머스/Python] 더 맵게 - Level2 (0) | 2021.05.29 |
---|---|
[프로그래머스/Python] 다리를 지나는 트럭 - Level2 (0) | 2021.05.25 |
[프로그래머스/Python] 프린터 - Level2 (0) | 2021.05.22 |
[프로그래머스/Python] 기능개발 - Level2 (0) | 2021.05.21 |
[프로그래머스/Python] 다트게임 (0) | 2021.05.19 |