알고리즘 문제

[Python] 주식가격(스택/큐)

Everyday Happy ❤︎ 2023. 11. 26. 14:07
 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

문제 설명

초 단위로 기록된 주식가격이 담긴 배열 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초간 가격이 떨어지지 않았습니다.

제출

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

 

💬 후기

이중 for 문으로 접근했는데 이 문제는 스택/큐 문제였다는 점 !!

popleft을 사용해서 왼쪽부터 차근차근 비교해보자.

첫 번째 반복에서는 c에 1이 할당되고 나머지 prices는 [2,3,2,3] 이 된다.

→ 1보다 작은 숫자가 없기 때문에 count 는 4

두 번째 반복에서는 c에 2가 할당되고 나머지 prices는 [3,2,3] 이 된다.

→ 2보다 작은 수가 역시 없기 때문에 count는 3

세 번째 반복에서는 c에 3이 할당되고 나머지 prices는 [2,3] 이 된다.

→ 3보다 작은 수 2가 있다 !! 그러면 count에 +1만 되고 break 로 나온다.

네 번째 반복에서는 c에 2가 할당되고 나머지 prices는 [3]이 된다.

→ 2보다 작은수가 없다. count는 1

마지막 다섯 번재 반복에서는 c에 3이 할당되고 나머지 prices는 없다.

→ 마지막이기 때문에 count 는 0

 

Tip.

하나 ! popleft를 사용하여 c에 저장

둘 ! answer 리스트에 count 추가