본문 바로가기
Algorithm/프로그래머스

Lv 2 주식가격

by IT learning 2021. 6. 18.
728x90

 

문제 설명

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

제한사항

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

문제 풀이

문제를 이해를 잘 못해서 너무 오래 시간을 끌었다.

문제에서 원하는건, 언제 시점부터 가격이 떨어지냐 이다. 

prices return
[1, 2, 3, 2, 3] [4, 3, 1, 1, 0]

위 표를 보면, 1의 경우 숫자가 떨어지지 않으니까 4초 동안 유지 됐다. 2의 경우도 숫자가 떨어지지 않았으니 3초동안 유지 됐다.

3의 경우 1초 후에 2로 숫자가 떨어진다. 아까도 말했지만, 문제에서 원하는건 언제 떨어졌냐다. 그 다음 2는 수가 떨어지지 않았으니 1초. 3은 마지막 숫자이니 0 으로 마무리가 된다.

 

이해가 잘 안갈수도 있겠지만, 문제의 핵심은 떨어지는 그 순간을 원하는 거다

 

코드

from collections import deque

def solution(prices):
    answer = []
    prices = deque(prices)
    t = len(prices)
    while t != 0:
        cnt = 0
        tmp = prices.popleft()
        for i in prices:
            cnt += 1
            if tmp > i :
                break
        answer.append(cnt)
        t -= 1
    
    return answer

처음에 deque를 사용하지 않고 그냥 리스트의 pop을 이용했었다. 그런데 pop의 경우 시간 복잡도가 O(n) 이라서 효율성에서 계속 빠꾸가 났다. 그래서 열심히 서칭을 한 결과 deque로 사용하여 popleft()를 이용하면 시간 복잡도가 줄어드는 것을 볼 수 있었다.

728x90

'Algorithm > 프로그래머스' 카테고리의 다른 글

Lv1 신규 아이디 추천  (0) 2021.06.21
Lv1 폰켓몬  (0) 2021.06.21
Lv2 전화번호 목록  (0) 2021.06.17
Lv1 완주하지 못한 선수  (0) 2021.06.17
2020 카카오 인턴 - 키패드 누르기  (0) 2021.05.05

댓글

IT_learning's Commit