[programmers]Stack/Queue-株価(Python)


ソース

Stack/Queue:株価[Lv 2]


問題の説明


秒単位で記録された株価の配列価格をパラメータとして指定すると、価格が下がらない時間帯に数秒戻るように解く関数が完了する.

せいげんじょうけん

  • の価格は、それぞれ1以上10000以下の自然数です.
  • 価格の長さは2以上100000以下です.
  • I/O例


    pricesreturn[1, 2, 3, 2, 3][4, 3, 1, 1, 0]

    I/O例説明

  • 1秒の1はずっと値下げしていません.
  • 2秒の2はずっと値下げしていません.
  • 3秒の3は1秒後に値下げされます.そのため、価格は1秒以内に下がっていない.
  • 4秒の2は1秒で値下げされませんでした.
  • 5秒の3は0秒以内に値下げされませんでした.
  •  

    Solution


    もんだいぶんせき


    問題の説明は私には難しすぎる.だから、答えがなぜそうなのか説明してから、答えをしたいと思います.
    リストのインデックスは0から始まり、問題の秒は1から始まるので混同される可能性があるので、秒を0から始まるように変更します.
    pricesreturn[1, 2, 3, 2, 3][4, 3, 1, 1, 0]
    0초 일 때, prices[0] = 1
    0초 제외, 그 이후 남는 주식 목록: [2, 3, 2, 3]
    남은 주식 목록에서 0초값(prices[0], 1)보다 작아질 때까지의 길이: 없음
    0초 값보다 작아질 때가 없으므로 끝까지 유지.
    유지시간: 4초
    1초 일 때, prices[1] = 2
    1초 제외, 그 이후 남는 주식 목록: [3, 2, 3]
    남은 주식 목록에서 1초값(prices[1], 2)보다 작아질 때까지의 길이: 없음
    1초 값보다 작아질 때가 없으므로 끝까지 유지.
    유지시간: 3초
    2초 일 때, prices[2] = 3
    2초 제외, 그 이후 남는 주식 목록: [2, 3]
    남은 주식 목록에서 2초값(prices[2], 3)보다 작아질 때까지의 길이: 1
    여기서 2초값보다 작아지는 때는 3초이고, prices[3]은 2이다.
    유지시간: 1초
    3초 일 때, prices[3] = 2
    3초 제외, 그 이후 남는 주식 목록: [3]
    남은 주식 목록에서 3초값(prices[3], 2)보다 작아질 때까지의 길이: 없음
    3초 값보다 작아질 때가 없으므로 끝까지 유지.
    유지시간: 1초
    4초 일 때, prices[4] = 3
    4초 제외, 그 이후 남는 주식 목록: []
    이 이후 남은 주식이 없으므로 이 때가 지나면 모두 끝.
    유지시간: 0초

    説明する

    from collections import deque
    
    def solution(prices):
        answer = []
        prices = deque(prices)
    
        while prices:
            now = prices.popleft()
            time = len(prices)
            for x in enumerate(prices):
                if x[1] < now:
                    time = x[0] + 1
                    break
            answer.append(time)
    
        return answer
    Queueを使用しました.pricesをキューに変換し、一番前の要素を1つずつポップアップ()します.( now )
    前から順次残価にnow未満の値があるかを確認する.価格が存在する場合、time해당 값의 index + 1が代入され、forゲートが終了する.now未満の値が存在せず、for文がすべて迂回している場合、timepricesの長さに代入される.timeanswerに追加します.

    結果