stack 안에는 주식 가격이 최초로 떨어지는 시점을 찾지 못한 가격의 idx
== 늘 stack의 top에 있는 가격 ⇐ 현 가격 일 때만 stack에 넣음
만약 stack의 top에 있는 가격 > 현 가격이라면 stack의 top의 주식 가격이 최초로 떨어진 것 → 답 갱신해주기
3번을 2번이 될 때까지 반복
📖풀이
📎Stack #1
def solution(prices): sec = [0 for _ in range(len(prices))] st = [] for i in range(0, len(prices)): while st and prices[st[-1]] > prices[i]: j = st.pop() sec[j] = i-j st.append(i) while st: x = st.pop() sec[x] = len(prices)-1 -x return sec
📎Stack #2
def solution(prices): sec = [i for i in range(len(prices)-1, -1, -1)] # 각 시점의 최대 가격이 떨어지지 않은 기간 st = [] # 가격이 떨어지지 않고 있는 시점의 idx 넣어줌 for i in range(0, len(prices)): # 가격이 떨어졌을 때 while st and prices[st[-1]] > prices[i]: j = st.pop() sec[j] = i - j # 현재 시점과 해당 가격의 시점 차 (가격 방어 성공 기간) st.append(i) return sec
loop를 한 번 다 돌았는데도 stack에 남아있는 값들 → 해당 시점에서 끝까지 가격이 떨어지지 않음 == 해당 시점에서 최장 기간 가격 유지
그럼 처음 가격이 떨어지지 않는 기간을 담은 리스트를 만들 때 각 시점에서 가격이 떨어지지 않을 수 있는 최대 시간을 담으면 마지막에 stack을 순회하지 않아도 됨
📖What I learned
stack 안에는 주식 가격이 최초로 떨어지는 시점을 찾지 못한 가격의 idx
== 늘 stack의 top에 있는 가격 ⇐ 현 가격 일 때만 stack에 넣음
이런 개념의 stack 문제가 정말정말 많이 출제되므로 기억 (앞의 값 & 뒤의 모든 값들과 대소를 비교)