프로그래머스|주식가격

README·2022년 12월 20일
0

파이썬 PS풀이

목록 보기
104/136

문제 설명

초 단위로 기록된 주식의 가격을 입력받고 주식 가격이 떨어지지않은 시간은 얼마인지 구하는 문제입니다.

작동 순서

  1. 주식 가격을 입력받습니다.
  2. 현재, 미래, 임시저장 이렇게 3개의 큐를 생성해줍니다.
  3. 현재 큐에 주식가격들을 입력합니다. 이 큐의 가장 마지막에 있는 값이 현재의 주식 가격입니다.
  4. 마지막 시간의 주식 가격은 떨어질 시간이 없으므로 0을 입력해줍니다. 그리고 마지막 시간의 주식 가격을 미래 큐에 삽입합니다.
  5. 현재 큐에 남아있는 값이 없을 때까지 반복문을 수행합니다.
  6. 현재 큐의 가장 마지막에 있는 현재 가격을 뽑은 뒤 미래 언제까지 떨어지지 않는지 구해줍니다. 구하는 과정은 미래 큐에서 앞의 값부터 꺼내오며 값을 비교하고 떨어지지 않은 경우 count를 +해주고 떨어진 경우 과정을 종료합니다. 이때 미래 큐에서 꺼낸 값은 임시저장 큐에 저장해놓은 뒤 과정이 종료됐을 때 임시저장 큐에 있는 모든 값들을 미래 큐에 삽입해줍니다. 그리고 현재 가격을 미래 큐의 가장 앞에 삽입해줍니다. (현재 가격의 과거 가격들의 미래입니다.)
  7. 만약 가격이 끝까지 떨어지지 않은 경우 더 이상 시간이 지나지 않고 장이 종료되기 때문에 마지막 과정에서 count에서 1을 더한 것을 빼주어야 합니다.
  8. 모든 과정이 종료되면 answer를 뒤집어줍니다. (시간의 역순으로 값을 구해서 저장했기 때문에 시간의 순서대로 출력하기위해서는 answer를 뒤집어줘야합니다.)

소스코드

from collections import deque


def solution(prices):
    answer = []

    now = deque()
    future = deque()
    temp = deque()

    for i in prices:
        now.append(i)

    answer.append(0)
    future.append(now.pop())

    while now:
        nowPrice = now.pop()
        count = 1

        while True:
            futurePrice = future.popleft()
            temp.appendleft(futurePrice)
            if futurePrice >= nowPrice:
                count += 1
            else:
                while temp:
                    future.appendleft(temp.popleft())
                answer.append(count)
                break
            if not future:
                while temp:
                    future.appendleft(temp.popleft())
                answer.append(count - 1)
                break
        future.appendleft(nowPrice)
    answer.reverse()
    return answer

추가 설명

코드 설명을 쓰다 보니 복잡해졌는데 now 큐에서 뒤에서부터 꺼내오면 아직 확인하지 않은 시간들중 가장 늦은 시간이 되고 future 큐에서 앞에서부터 꺼내오면 시간순으로 미래를 확인할 수 있기 때문에 현재 값과 비교해가며 언제까지 가격이 떨어지지 않는지 알 수 있습니다. 그리고 미래의 값들은 연산을 수행하며 계속해서 비교를 수행해야하기때문에 임시저장 큐에 넣어놓고 한 번의 과정이 끝날 때 미래 큐에 다시 삽입해주는 것입니다.
ps.문제를 설명하는 게 푸는것 보다 어려운 거 같네요... 문제를 풀 때 풀이 과정을 논리적으로 정리하는 법도 연습을 하면서 해봐야 할 것 같습니다.

profile
INTP 개발자 지망생

0개의 댓글