본문 바로가기
Problem Solving/Programmers

Programmers - 주식가격[파이썬(python)]

by Deeppago 2022. 4. 24.

문제 출처 : https://programmers.co.kr/learn/courses/30/lessons/42584

 

코딩테스트 연습 - 주식가격

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

programmers.co.kr

문제 설명

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

제한사항

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

 

입출력 예

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

 

입출력 예 설명

  • 1초 시점의 ₩1은 끝까지 가격이 떨어지지 않았습니다.
  • 2초 시점의 ₩2은 끝까지 가격이 떨어지지 않았습니다.
  • 3초 시점의 ₩3은 1초뒤에 가격이 떨어집니다. 따라서 1초간 가격이 떨어지지 않은 것으로 봅니다.
  • 4초 시점의 ₩2은 1초간 가격이 떨어지지 않았습니다.
  • 5초 시점의 ₩3은 0초간 가격이 떨어지지 않았습니다.

문제 풀이

prices 배열을 큐로 변환하고 가격을 순차 탐색하여 문제를 해결할 수 있다. 알고리즘은 아래와 같다.

  1. 큐에서 하나의 가격을 pop한다.
  2. 큐에 남아있는 가격들을 순차적으로 탐색하며 가격이 떨어진 시점을 구한다.
  3. answer배열에 구한 시점을 추가한다.
  4. 큐에 어떠한 원소도 남아있지 않을 때까지 1, 2, 3을 반복한다.

 

구현 코드

코드 링크 : 주식 가격

from collections import deque

def solution(prices):
    answer = []
    q = deque(prices)
    while q:
        price = q.popleft()
        count = 0
        if len(q) != 0:
            for p in q:
                count += 1
                if price > p:
                    break
        answer.append(count)

    return answer

댓글