Algorithm/프로그래머스

[프로그래머스/Python] 주식가격 - Level2

poppy 2021. 5. 24. 23:12
반응형

https://programmers.co.kr/learn/courses/30/lessons/42584

 

코딩테스트 연습 - 주식가격

초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요. 제한사항 prices의 각 가격은 1 이상 10,00

programmers.co.kr

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 블로그]
반응형