삽집하는 개발들/알고리즘

[97일차] 주식가격 - 프로그래머스 - 42584(python - 스택/큐)

악투 2023. 12. 16. 16:42
반응형

문제 설명

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

 

제한사항

prices의 각 가격은 1 이상 10,000 이하인 자연수입니다.
prices의 길이는 2 이상 100,000 이하입니다.

 

예제 입력, 예제 출력

[1, 2, 3, 2, 3] [4, 3, 1, 1, 0]

 

1초 시점의 ₩1은 끝까지 가격이 떨어지지 않았습니다.
2초 시점의 ₩2은 끝까지 가격이 떨어지지 않았습니다.
3초 시점의 ₩3은 1초뒤에 가격이 떨어집니다. 따라서 1초간 가격이 떨어지지 않은 것으로 봅니다.
4초 시점의 ₩2은 1초간 가격이 떨어지지 않았습니다.
5초 시점의 ₩3은 0초간 가격이 떨어지지 않았습니다.

 

코드 및 설명

def solution(prices):    
    stack_prices = prices
    answer = []
    
    while stack_prices:
        count = 0
        price = stack_prices.pop(0)
        
        for val in stack_prices: 
            count += 1
            if price > val:
                break
                
        answer.append(count)
        
    return answer

 

이 문제는 처음 들어온 주식의 가격이 다음 주식의 가격보다 높은 지 적은지를 체크하고 몇 초동안 유지되었는 지를

 

구하는 문제이다. 위에 코드처럼 작업을 하였으나, 정확성에서는 통과되나, 효율성에서 떨어진다.

 

deque를 이용해야 효율성에서 통과한다.

 

예제로 설명하겠다.

 

[1, 2, 3, 2, 3]

 

stack_prices가 없어질때까지 돌게 되는데 stack_prices.popleft를 하면 1이 들어올 것이고 1의 값이 stack_prices값들보다

 

작으면 count + 1를 해주고 price값이 val보다 커지는 순간 break를 해준다. count는 4가 되고 answer.append()해준다.

 

[2, 3, 2, 3]

stack_prices.popleft를 하면 2가 들어올 것이고 반복해준다.

 

[3, 2, 3]

[2, 3]

[3]

answer = [4, 3, 1, 1, 0]

 

stack_prices가 빌때까지 돌 것이고 answer에 답이 담길 것이다. 그럼 return해주면 된다.

from collections import deque

def solution(prices):    
    stack_prices = deque(prices)
    answer = []
    
    while stack_prices:
        count = 0
        price = stack_prices.popleft()
        
        for val in stack_prices: 
            count += 1
            if price > val:
                break
                
        answer.append(count)
        
    return answer
반응형