유자차의 재테크 공부방

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

파이썬/알고리즘 문제 풀이

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

유자차H 2022. 6. 27. 16:08
반응형

문제

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

제한사항
  • prices의 각 가격은 1 이상 10,000 이하인 자연수입니다.
  • prices의 길이는 2 이상 100,000 이하입니다.
입출력 예pricesreturn
[1, 2, 3, 2, 3] [4, 3, 1, 1, 0]
입출력 예 설명
  • 1초 시점의 ₩1은 끝까지 가격이 떨어지지 않았습니다.
  • 2초 시점의 ₩2은 끝까지 가격이 떨어지지 않았습니다.
  • 3초 시점의 ₩3은 1초뒤에 가격이 떨어집니다. 따라서 1초간 가격이 떨어지지 않은 것으로 봅니다.
  • 4초 시점의 ₩2은 1초간 가격이 떨어지지 않았습니다.
  • 5초 시점의 ₩3은 0초간 가격이 떨어지지 않았습니다.

 

문제 풀이

스택/큐 문제였으나 큐를 사용하더라도 O(n^2)이기 때문에 이중 for문을 사용해도 상관없을 것 같다.

정확도 문제에서는 큰 차이는 없었지만 효율성 문제에서는 시간이 반정도 절약이 되는 것을 알 수 있었다.

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

정확성  테스트
테스트 1 〉	통과 (0.00ms, 10.1MB)
테스트 2 〉	통과 (0.04ms, 10.2MB)
테스트 3 〉	통과 (0.56ms, 10.4MB)
테스트 4 〉	통과 (0.62ms, 10.4MB)
테스트 5 〉	통과 (0.78ms, 10.3MB)
테스트 6 〉	통과 (0.04ms, 10.3MB)
테스트 7 〉	통과 (0.67ms, 10.1MB)
테스트 8 〉	통과 (0.42ms, 10.2MB)
테스트 9 〉	통과 (0.03ms, 10.2MB)
테스트 10 〉	통과 (0.76ms, 10.4MB)

효율성  테스트
테스트 1 〉	통과 (114.12ms, 18.8MB)
테스트 2 〉	통과 (94.05ms, 17.5MB)
테스트 3 〉	통과 (141.43ms, 19.5MB)
테스트 4 〉	통과 (109.50ms, 18.2MB)
테스트 5 〉	통과 (72.65ms, 17.1MB)

 

deque를 사용한 풀이 방법

from collections import deque
def solution(prices):
    prices = deque(prices)
    ans = []
    while len(prices)>0:
        p = prices.popleft()
        time = 0
        for i in prices:
            time+=1
            if p > i:
                break
        ans.append(time)
    return ans
    
정확성  테스트
테스트 1 〉	통과 (0.01ms, 10.3MB)
테스트 2 〉	통과 (0.03ms, 9.95MB)
테스트 3 〉	통과 (0.32ms, 10.2MB)
테스트 4 〉	통과 (0.33ms, 10.4MB)
테스트 5 〉	통과 (0.88ms, 10.2MB)
테스트 6 〉	통과 (0.03ms, 10.1MB)
테스트 7 〉	통과 (0.20ms, 10.2MB)
테스트 8 〉	통과 (0.45ms, 10.3MB)
테스트 9 〉	통과 (0.02ms, 10.3MB)
테스트 10 〉	통과 (0.41ms, 10.3MB)

효율성  테스트
테스트 1 〉	통과 (65.20ms, 18.8MB)
테스트 2 〉	통과 (47.01ms, 17.5MB)
테스트 3 〉	통과 (81.36ms, 19.4MB)
테스트 4 〉	통과 (57.88ms, 18.2MB)
테스트 5 〉	통과 (39.06ms, 16.9MB)
반응형
Comments