[レベル2]株価


問題の説明


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

せいげんじょうけん

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


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

    コード#コード#

    from collections import deque
    def solution(prices):
        answer = list()
        # prices를 deque로 만들어주어서 왼쪽부터 데이터를 뽑아낼 수 있도록 만들어준다
        prices = deque(prices)
        
        # 계속해서 popleft를 사용해서 데이터를 추출할 것이기 때문에 만약에 queue가 비었다면 break 할 수 있도록 설정
        while prices:
            # 현재 값을 popleft로 받아오고 time = 0 으로 설정
            current, time = prices.popleft(), 0
            # popleft를 한 뒤 남은 가격들과 비교를 해서 만약 현재 가격이 더 작다면 time을 더해주고 만약에 현재 가격이 더 커지는 순간이 온다면 break를 한다.
            for num in prices:
                time += 1
                if current > num:
                    break
            answer.append(time)
        
        return answer

    学識


    最初に列挙(price)を使用して空のスタックに値を追加し、スタック長-1のインデックス範囲で値比較を行い、価格が下がったインデックスを答えリストに入力します.次にforゲートをもう一度回してindexを計算する方法で行います.最初のfor文では、スタックに1つずつ入れてからスタックを繰り返し文に戻し、精度100%、時間複雑度O(n^2)、効率テストで0点を得た(ほほほ).
    では、私が今しなければならないのは価格から、要素を左から出して、価格の要素と比較して、どのように効果的にそれを行うかを考えているとき(多くのコードを参考にして)、dequeの使い方を理解しました.左から、データを抽出できるdequeを用いて要素を抽出し、for文を用いて比較し、現在の値がより大きい場合はbreak方式を用いて時間複雑度O(n)が効果的に問題を解決することができる.