[프로그래머스] 주식가격(스택/큐 Lv2) - 파이썬

draidev·2022년 3월 3일
post-thumbnail

프로그래서스 스택/큐


문제 설명

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

제한사항

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

입출력 예

입출력 예 설명

  • 1초 시점의 ₩1은 끝까지 가격이 떨어지지 않았습니다.
  • 2초 시점의 ₩2은 끝까지 가격이 떨어지지 않았습니다.
  • 3초 시점의 ₩3은 1초뒤에 가격이 떨어집니다. 따라서 1초간 가격이 떨어지지 않은 것으로 봅니- 다.
  • 4초 시점의 ₩2은 1초간 가격이 떨어지지 않았습니다.
  • 5초 시점의 ₩3은 0초간 가격이 떨어지지 않았습니다.
    ※ 공지 - 2019년 2월 28일 지문이 리뉴얼되었습니다.

1. 중첩 for문 사용 코드

떠오르는 대로 중첩 for문을 사용하여 풀었다. 간단하지만 효율성은 좋지 못하다.

def solution(prices):
    answer = []
    count = 0
    
    for i in range(len(prices) - 1):
        for j in range(i + 1, len(prices)):
            if prices[i] <= prices[j]:
                count += 1
            else:
                count += 1
                break
        answer.append(count)
        count = 0
    answer.append(0)
        
    return answer

2. 큐 사용 코드

다른 사람의 풀이에 큐를 사용한 방법을 보면 pricesdeque자료형으로 만들고
비교되어지는 prices의 원소popleft()하여 c에 대입한 다음,
deque에 남아있는 원소들과 비교하는 방법을 사용하였다.
마찬가지로 간단하지만 효율성은 더 뛰어나다.

from collections import deque
def solution(prices):
    answer = []
    prices = deque(prices)
    while prices:
        c = prices.popleft()

        count = 0
        for i in prices:
            if c > i:
                count += 1
                break
            count += 1

        answer.append(count)

    return answer

효율성 테스트를 보면 위와 아래의 코드의 실행시간 차이가 2배정도 나는 것을 알 수 있다.

  • deque는 list보다 속도가 빠르다. pop(0)와 같은 메서드를 수행할 때 리스트의 경우 O(N)연산을 수행하지만 deque는 O(1) 연산을 수행하기 때문이다.
    (출처 : 점프 투 파이썬 collections.deque - 데크)

collections.deque - 데크

profile
I trust myself.

0개의 댓글