Level 2. 株価


株価


エンコーディングテスト練習>スタック/キュー>株価
https://programmers.co.kr/learn/courses/30/lessons/42584

問題の構想


入力
  • :ステップ単位の値リスト
  • 構想(1):Deque()の使用
    Popleft()は
  • listの要素をポップアップ()し、この値が残りのリストの要素より大きい場合、cnt=1、break、およびcnt+=1の追加操作
  • を実行する.
  • cnt値を空のリストに挿入し、
  • を出力する.
  • 構想(2):デュアルゲート使用
  • 0からlen(list()−1)までの位置値を持つ要素の値のうち、iからlen(list()−1)までの位置値より小さい要素の値を持つ場合、+=1(独自の要素を含む)
  • が予め作成するlen(list)長の空のリストを挿入し、
  • を出力する.

    問題を解く


    最初の解答:deque()

    from collections import deque
    
    prices = [1,2,3,2,3]
    
    result = [] # Set initial vlaue
    price = deque(prices) # Transform list to deque
    while price:
        cnt = 0 # Set local value
        p1 = price.popleft() # pop first element
        for p in price:
            if p1 > p:
                cnt = 1 # Count 1
                break
            cnt += 1
        result.append(cnt)

    2番目の解答:二重for文

    prices = [1,2,3,2,3]
    
    result = [0] * len(prices) # Set initial value
    for i in range(len(prices)-1):
        for j in range(i,len(prices)-1):
            if prices[i] > prices[j]:
                break
            else:
                result[i] += 1

    完全なコード


    Deque()

    from collections import deque
    
    def solution(prices):
        result = []
        price = deque(prices)
        while price:
            cnt = 0
            p1 = price.popleft()
            for p in price:
                if p1>p:
                    cnt += 1
                    break
                cnt+=1
            result.append(cnt)
        return result
    
    prices = [1,2,3,2,3]
    solution(prices)

    にじゅうゲート

    def solution(prices):
        result = [0] * len(prices) # Make initial array
    
        for i in range(len(prices)-1):
            for j in range(i, len(prices)-1):
                if prices[i] >prices[j]:
                    break
                else:
                    result[i] +=1
        return result
    
    prices = [1,2,3,2,3]
    solution(prices)