다은하게

프로그래머스 [Level2. 주식가격] - python 본문

코딩테스트/프로그래머스

프로그래머스 [Level2. 주식가격] - python

DaaEun 2021. 4. 5. 11:47

문제 주식가격 바로가기

풀이 

  • prices 리스트 각각의 값(가격)들이 떨어지는데 걸리는 시간(몇 초)을 출력한다.
  • 자료구조 스택을 이용하여 시간 효율성을 높인다.
  • 스택안에 prices 리스트의 인덱스를 push하여, 적절한 조건(가격이 이전 시간의 가격보다 떨어지는 경우)에 맞으면 pop하여 시간을 측정한다. 
  • 끝까지 떨어지지 않은 주식가격에 대한 인덱스 모두를 pop하여 시간을 측정한다.

☞ study

▷ 리스트 생성 시 value의 초기화 값리스트 크기를 같이 선언한다.

▶ 참고 파이썬에서 특정 크기의 목록을 만드는 방법

 

▷ 파이썬에서 스택 자료구조는 따로 제공하지 않는다. list로 대체하여 스택을 표현한다.

▶ 참고 [Python] Stack 사용하기

☞ 코드

def solution(prices):

    # answer 리스트의 크기와 초기화 값들을 선언한다.
    answer = [0]* len(prices)

    # prices의 인덱스를 담을 list를 선언한다.
    stack = []
    
    for i, price in enumerate(prices):

        # stack안에 값들이 존재하고 가격이 이전 시간의 가격보다 떨어지면 while문을 실행한다.
        while stack and price < prices[stack[-1]]:
            # stack안에서 해당 값(해당 가격이 위치하는 인덱스)을 pop한다.
            pre_i = stack.pop()
            # 해당 가격이 떨어지는데 걸린 시간(단위 : 초) = 현재 가격의 인덱스 - 해당 가격의 인덱스를 뺀 시간
            answer[pre_i] = i - pre_i
        
        # append()는 stack에서 push와 같은 역할이다.
        stack.append(i)
 
    # 끝까지 떨어지지 않은 가격들에 대한 시간들을 저장하기 위해
    # stack안에 남은 값들을 pop한다.
    while stack:
        no_fall_i = stack.pop()
        answer[no_fall_i] = (len(prices) - 1) - no_fall_i

    return answer

 

☞ 결과

정답입니다!

Comments