IT/Programmers
[프로그래머스/Javascript/Stack] 주식가격
파티에
2021. 4. 6. 22:13
1. 서론
위 문제는 brute force를 사용하면 이중 루프를 통해서 쉽게 해결할 수 있지만, stack / queue 문제로 분류된 만큼 stack을 사용해서 문제를 풀었다.
2.문제설명(출처: programmers.co.kr/learn/courses/30/lessons/42584)
3. 문제풀이
1) 시간을 측정할 answer의 길이를 prices와 동일하게 맞춘다.
2) stack으로 사용할 배열을 생성한다.
3) 모든 prices에 대하여 아래 명령을 반복한다.
3-1) 최초의 경우(stack이 비어있는 경우) 이거나 주식 가격이 떨어졌다면, 아래 명령을 반복한다.
3-1-1) 주식 값이 떨어지기 이전 시간을 stack에서 가져온 뒤 t에 저장한다.
3-1-2) 현재 시간 - t를 answer[t]에 저장한다.
4) stack에 내용물들이 모두 없어질 때 까지 아래 명령을 반복한다.
4-1) stack에 있는 가격이 유지되었던 시간을 꺼낸 뒤, t에 저장한다.
4-2) 전체 시간(n - 1) - 가격이 유지되었던 시간(t)를 통해 가격이 떨어지지 않은 시간을 계산한다.
4. 결과코드
def solution(prices):
n = len(prices)
answer = [0] * n
stack = []
for i in range(n):
while stack and prices[stack[-1]] > prices[i]:
t = stack.pop()
answer[t] = i - t
stack.append(i)
while stack:
t = stack.pop()
answer[t] = n - 1 - t
return answer