문제
초 단위로 기록된 주식가격이 담긴 배열 prices가 매개변수로 주어질 때, 가격이 떨어지지 않은 기간은 몇 초인지를 return 하도록 solution 함수를 완성하세요.
풀이
알고리즘 : 스택
- 배열 prices, 이전 떨어지지 않은 주식 stack을 생성한다.
- 배열 prices를 순환하는 반복문
- stack에 있는 prices + 1
- stack을 순환하면서 현재 주식과 비교 후 가격이 떨어졌으면 stack에서 뺀다.
- 현재 주식을 stack에 더한다.
Python 코드
def solution(prices):
answer = [0]*len(prices)
stack = []
popList = []
for idx, cnt_price in enumerate(prices) :
if stack :
for jdx, [zdx, prev_price] in enumerate(stack) :
answer[zdx]+=1
if prev_price > cnt_price : # 가격이 떨어짐
popList.append(jdx)
else :
while popList :
stack.pop(popList.pop())
stack.append([idx, cnt_price])
return answer
후기 및 보완할 점
약 40분 정도 소요된 것 같다. 풀이 과정을 생각해내는데는 별로 오래 걸리지 않았지만 생각을 바로 구현하는데도 시간을 많이 쓴다. 다 짜고나니 코드의 깔끔성이나 변수명도 조금 마음에 들지 않아서리.. 다음엔 이 부분도 보완해서 풀어야겠다.
'Algorithm' 카테고리의 다른 글
[Algorithm][Python3][BOJ 1300] K번째 수 (0) | 2022.02.09 |
---|---|
[Algorithm][BOJ 9251] LCS (0) | 2022.02.02 |
[Algorithm][BOJ 13335] 트럭 - python (0) | 2022.01.25 |
[Algorithm][BOJ 15565] (Python) 귀여운 라이언 (0) | 2022.01.25 |
[Algorithm] 시간 복잡도와 Big-O 표기법 (0) | 2022.01.02 |