프로그래머스_주식가격

임정민·2024년 1월 2일
0

알고리즘 문제풀이

목록 보기
136/173
post-thumbnail

프로그래머스 Lv2 문제입니다. 실전에 대비하기 위해 60분 시간제한을 두고 풀었습니다.

문제

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

[나의 풀이]

⌛ 18분


from collections import deque

def solution(prices):
    
    answer = []
    prices = deque(prices)
               .
    while prices:
        
        price = prices.popleft()
        
        tmp_prices = prices
        cnt = 0
        
        for tmp_price in tmp_prices:
            cnt += 1 
            if price>tmp_price:
                break
        answer.append(cnt)
    
    return answer

입력된 주식 가격 배열이 주어지고, 각 시간별(인덱스) 주식가격이 떨어질 때까지의 초를 구하는 문제입니다.

queue 구조를 활용하여 시간대별로 돌고, 그 뒤 for문을 활용하여 각 시간대별 주식 하락까지의 시간을 구하였습니다.

[다른 사람의 풀이1]


def solution(prices):
    
    stack = []
    answer = [0] * len(prices)

    for i in range(len(prices)):
        while stack != [] and stack[-1][1] > prices[i]:
            past, _ = stack.pop()
            answer[past] = i - past
        
        stack.append([i, prices[i]])
        
    for i, s in stack:
        answer[i] = len(prices) - 1 - i
        
    return answer

stack을 활용한 풀이입니다. 각 시간대를 돌며 현재 주식가격이 이전 주식 가격보다 올랐다면 넘어가고 그것이 아닐 때에는 이전 주식 가격과 비교하며 주식 하락까지의 시간을 구하는 방식이였습니다.

포인트는 각 시간대별로 돌며 [인덱스,값]을 stack에 누적시키며 하락할 때 stack.pop()하여 판단했다는 점입니다.

이때, 주식이 한번도 하락하지 않는 시간대의 가격이 있다면 주식 하락까지의 시간은 입력된 배열의 길이에 비례하므로 길이-인덱스로 표현해준 것을 볼 수 있었습니다.

[다른 사람의 풀이2]


def solution(prices):
    length = len(prices)
    
    # answer을 max값으로 초기화  
    answer = [ i for i in range (length - 1, -1, -1)]
    
    # 주식 가격이 떨어질 경우 찾기
    stack = [0]
    for i in range (1, length):
        while stack and prices[stack[-1]] > prices[i]:
            j = stack.pop()
            answer[j] = i - j
        stack.append(i)
    return answer

'다른 사람의 풀이1'과 유사하되 answer을 max값으로 초기화한 점이 다른 풀이이입니다.

이 경우에도 주식 가격이 떨어질 때에만, 이전 주식 가격들과 비교하여 주식 하락까지의 시간으로 바꾸어주고

이외에 주식 가격이 떨어지지 않는 시간대에는 처음 초기화한 그대로 최댓값으로 적용되는 것을 볼 수 있었습니다.

감사합니다.

profile
https://github.com/min731

0개의 댓글