Recent Posts
다은하게
프로그래머스 [Level2. 주식가격] - python 본문
☞ 문제 주식가격 바로가기
☞ 풀이
- 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