반응형
풀이
입력으로 주어진 prices를 차례대로 스택에 push한다. 스택에는 (가격, 스택에 push된 시간)과 같은 튜플 형태로 넣어줬다. 여기에서 시간은 인덱스와 같은 의미를 지닌다. 스택에 넣기 전에 스택의 top에 있는 주식의 가격과 비교한다. 현재 스택의 top에 있는 주식 가격보다 현재 주식의 가격이 낮을 경우에는 스택에서 해당 주식을 pop을 통해 제거한다. 제거하면서 answer 배열에 '현재 시간 - 스택에 push된 시간'을 구하여 알맞은 인덱스에 넣어주면된다.
코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | # (가격, 들어온 시간) def solution(prices): # 일단 answer 배열을 prices의 개수만큼 0으로 초기화해준다. answer = [0] * len(prices) st = [] time = 0 # 현재 시간 idx = 0 # 해당 주식의 인덱스 (시간) for price in prices: # 현재 스택의 top에 있는 주식의 가격보다 현재 가격이 낮을 경우에 스택을 pop해준다. # time - popIdx를 통해 해당 주식의 가격이 몇 초만에 낮아졌는지를 구해서 answer 배열을 수정한다. while len(st) != 0 and st[-1][0] > price: (_, popIdx) = st.pop() answer[popIdx] = time - popIdx st.append((price, idx)) idx += 1 time += 1 time -= 1 # 현재 단계에 스택에 남아 있는 주식들은 끝날때까지 가격이 떨어지지 않은 주식이다. # 남은 주식들의 가격이 떨어지지 않은 시간을 구하여 answer 배열을 수정한다. while st: (_, popIdx) = st.pop() answer[popIdx] = time - popIdx return answer | cs |
반응형
'Algorithm > Programmers' 카테고리의 다른 글
[고득점 Kit(해시)] 전화번호 목록 (Python) (0) | 2022.01.22 |
---|---|
[고득점 Kit(해시)] 완주하지 못한 선수 (Python) (0) | 2022.01.20 |
[고득점 Kit(스택/큐)] 다리를 지나는 트럭 (Swift, Python) (0) | 2022.01.18 |
[고득점 Kit(스택/큐)] 프린터 (Swift, Python) (0) | 2022.01.17 |
[고득점 Kit(스택/큐)] 기능개발 (Swift, Python) (0) | 2022.01.15 |
댓글