211117 - 주식 가격

이상해씨·2021년 11월 17일
0

알고리즘 풀이

목록 보기
14/94

◾ 주식 가격 : 프로그래머스 LEVEL 2

문제

초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요.


입력

  • prices의 각 가격은 1 이상 10,000 이하인 자연수입니다.
  • prices의 길이는 2 이상 100,000 이하입니다.

출력

  • 각 주식의 가격이 떨어지지않는 기간

입출력 예

pricesreturn
[1, 2, 3, 2, 3][4, 3, 1, 1, 0]

◾ 풀이

1. 해설

  • stack을 이용하여 해결할 수 있다.
  • value대신 index를 추가하여 비교한다.
    • stack의 마지막 값 위치의 값과 현재 값을 비교한다.
      • 현재 값이 작다면 : pop을 통해 마지막 값 위치의 결과를 입력한다.
      • 이후 stack에 현재 값의 index를 append
    • stack에 값이 남아있다면 끝까지 값이 떨어지지않는 경우로 결과를 입력해준다.
  • 예시) prices = [1, 2, 3, 2], stack = [], answer = [0, 0, 0, 0]
    • idx = 0 : stack = [0], answer = [0, 0, 0, 0]
    • idx = 1 : stack = [0, 1], answer = [0, 0, 0, 0]
    • idx = 2 : stack = [0, 1, 2], answer = [0, 0, 0, 0]
    • idx = 3 : stack = [0, 1, 2], answer = [0, 0, 0, 0]
      • prices[2]가 prices[3]보다 값이 크므로 stack.pop() 후 결과 계산
      • (prices[2] = 3) > (prices[3] = 2) => answer[2] = 1
      • stack[0, 1, 3], answer = [0, 0, 1, 0]
    • stack에 값이 남아있으므로 남은 결과 계산
      • 결과 : (prices 길이 - index - 1)
      • stack.pop() : answer[3] = 0
      • stack.pop() : answer[1] = 2
      • stack.pop() : answer[0] = 3
    • stack = [], answer[3, 2, 1, 0]

2. 프로그램

  1. prices의 길이만큼 반복
  2. prices(list_idx[-1]) > stock인 경우 해당 위치의 결과 계산
    • list_idx의 마지막 값 : list_idx.pop()(이하 idx)
    • answer[idx] : i - idx
  3. ilist_idx에 추가
  4. list_idx에 값이 있다면 남은 위치 결과 계산
    • answer[idx] : p_len - idx - 1
# 코드
def solution(prices):
    p_len = len(prices) # prices의 길이
    answer = [0 for i in range(p_len)]
    list_idx = []       # 인덱스 스택

    # prices 각 value의 index를 list_idx에 추가
    for i, stock in enumerate(prices):
        # 스택 top 인덱스의 값보다 stock가 작은 경우
        # 스택 top 인덱스의 결과 계산 
        while list_idx and stock < prices[list_idx[-1]]:
            idx = list_idx.pop()
            answer[idx] = i - idx
        list_idx.append(i)
    # 스택에 값이 남았다면 나머지 결과 계산
    while list_idx:
        idx = list_idx.pop()
        answer[idx] = p_len - idx - 1

    return answer

profile
후라이드 치킨

0개의 댓글

관련 채용 정보