개발 블로그

[프로그래머스/Javascript/Stack] 주식가격 본문

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