[Python] 프로그래머스 - 주식가격
programmers.co.kr/learn/courses/30/lessons/42584
스택이 개념은 쉬운데, 마스터하기는 매우 어려운 자료구조인 것 같다. (나만 그런가..)
스택을 활용해 푸는 문제들이 유독 어렵게 느껴진다...
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)
# 확실히 스택문제풀이가 떠올리기 힘든만큼 풀이는 깔끔하고 간결하게 나오긴 한다.
'문제풀이 > Programmers' 카테고리의 다른 글
[Python] 프로그래머스 - 소수 만들기 (0) | 2021.04.13 |
---|---|
[Python] 프로그래머스 - 뉴스 클러스터링 (0) | 2021.04.10 |
[Python] 프로그래머스 - 정수 삼각형 (0) | 2021.04.08 |
[Python] 프로그래머스 - 소수 찾기 (0) | 2021.04.05 |
[Python] 프로그래머스 - 가장 먼 노드 (0) | 2021.04.04 |