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

728x90
반응형

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

 

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

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

programmers.co.kr

스택이 개념은 쉬운데, 마스터하기는 매우 어려운 자료구조인 것 같다. (나만 그런가..)

스택을 활용해 푸는 문제들이 유독 어렵게 느껴진다...

 

1. answer에 len(prices)-1부터 0까지 넣어준다. prices길이가 5이면 answer = [4, 3, 2, 1, 0]

 

2. prices가 [1, 2, 3, 2, 3]일 때, enumerate(prices)를 하게 되면 (0, 1), (1, 2), (2, 3), (3, 2), (4, 3) 이런 식으로 index값과 value 값을 한번에 저장할 수 있다. (코테에 많이 쓰인다.)

 

3. stack에 원소가 존재하고 price가 prices[stack[-1]]보다 작으면, 주식 가격이 떨어진 것이므로 stack에서 pop을 한 뒤 answer[last]에 현재 인덱스 - 스택의 마지막원소(이것도 인덱스)를 넣어준다.

   (처음에 6번째 줄을 while price < prices[stack[-1]] and stack 으로 했다가 list indexError가 떴다.

    while stack and price < prices[stack[-1]]로 하면 처음에 stack에 원소가 존재하는지 판단하고 그 다음 price < prices[stack[-1]]을 판단하는데, 처음에 짠 코드로 하면 먼저 price < prices[stack[-1]]을 판단하고 그 다음 stack에 원소가 존재하는 지 판단하기 때문이다.)

 

4. stack에 idx를 append해주고 이걸 prices의 원소를 다 돌며 실행한다. 마지막으로 answer배열을 return해준다.

 

def solution(prices):
    stack = []
    answer = [i for i in range(len(prices) - 1, -1, -1)]
    for idx, price in enumerate(prices):
        while stack and price < prices[stack[-1]]:
            last = stack.pop()
            answer[last] = idx - last
        stack.append(idx)

    return answer

(프로그래머스 level2)

 

# 확실히 스택문제풀이가 떠올리기 힘든만큼 풀이는 깔끔하고 간결하게 나오긴 한다.

728x90
반응형
TAGS.

Comments