[프로그래머스] 주식가격

김영준·2022년 1월 17일
0
post-thumbnail

문제 설명

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

제한 사항

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

입출력 예

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

문제풀이

from collections import deque

def solution(prices):
    queue = deque(prices)
    answer = []
    
    while queue:
        price = queue.popleft()
        sec = 0
        for q in queue:
            sec += 1
            if price > q:
                break 
        answer.append(sec)        
    return answer
    

문제 해설

문제에 대해 설명을 하자면,

주식 가격을 초 단위로 기록한다. 1초 2초 3초 마다 얼마씩 변하는지 적어 논 배열을 prices.

그 초 당시에 가격이 떨어지지 않은 초 만큼 return 받아야 한다.

1초 시점 주식의 가격은 1, 

2초 시점 주식의 가격은 2,

3초 시점 주식의 가격은 3,

4초 시점 주식의 가격은 2,

5초 시점 주식의 가격은 3,

으로 이루어져 있다면,

 

1초에 샀을 때는 4초동안 안 떨어졌고,

2초에 샀을 때는 3초동안 안 떨어졌고,

3초에 샀을 때는 1초동안 안 떨어졌고,(1초 뒤에 가격 떨어지니까 1초동안만 방어한것)

4초에 샀을 때도 1초

5초는 마지막 초니까 0초 

그래서 [4,3,1,1,0]이 return되어야 한다.

Queue(FIFO) 활용

반복문을 2 중첩해서 풀 수 있었다. 인덱스가 0인 시점부터 가격이 떨어질 때까지의 초를 세고, 인덱스가 1인 시점부터 가격이 떨어질 때까지의 초를 세고, 이 과정을 모든 인덱스에 반복하는 것이다.

큐를 사용한다면 추가적인 인덱싱 없이 구현이 가능할 것 같아서 큐를 활용하였다.
prices로 queue를 초기화 시킨 후에 반복문을 돌면서 앞에서부터 하나씩 popleft해서
popleft한 뒤의, 남은 queue를 순회하며 값이 작아지기 전까지 초를 증가시키는 것을
queue가 빌때까지 반복하면 된다.

0개의 댓글