[프로그래머스 파이썬] 주식가격

일단 해볼게·2023년 2월 17일
0

프로그래머스

목록 보기
38/106

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

정답코드

def solution(prices):
    n = len(prices)
    # 1. answer를 prices 길이와 맞춘다.
    answer = [0] * n
    # 2. 스택 생성
    stack = []
    # 3. 0 ~ n-1 초까지 순회
    for i in range(n):
        # 1. 스택 비지 않고, prices[stack[-1]] > prices[i] 이라면 다음 반복
        # 1-1. 스택에서 마지막에 저장된 시간 top 꺼냄
        # 1-2. answer[top]에 i - top을 저장
        while stack and prices[stack[-1]] > prices[i]:
            top = stack.pop()
            answer[top] = i - top
        # 2. 스택에 현재 시간 i 저장
        stack.append(i)
    
    # 4. 만약 스택이 남아있다면, 스택이 빌 때까지 다음 반복
    while stack:
        # 1. 스택에서 마지막에 저장된 시간 top 꺼냄
        # 2. answer[top]에 가장 마지막 시간 n - 1 에서 top을 뺀 시간 저장
        top = stack.pop()
        answer[top] = n - 1 - top
    
    return answer

처음 시도한 코드

from collections import deque
def solution(prices):
    answer = []
    prices = deque(prices)
    
    while prices:
        sec = 0
        price = prices.popleft() # 현재 값
        
        for i in range(len(prices)):
            sec += 1
            
            if price > prices[i]: # 현재 값이 다음 값보다 클 때 = 가격이 떨어질 때
                break
                
        answer.append(sec)
    return answer

효율성에서 시간초과가 났다.

참고
https://gurumee92.tistory.com/170

profile
시도하고 More Do하는 백엔드 개발자입니다.

0개의 댓글