[programmers]株価

5104 ワード

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

説明する



すぐにドアを回してください.
最後に株価が下落していない場合だけ考えます.

他人を解く



スタックを利用しました.
def solution(p):

    # 답을 넣을 ans 배열
    ans = [0] * len(p)
    
    # index를 하나씩 넣어준다.
    stack = [0]
    for i in range(1, len(p)):
        # 만약 stack 마지막 값보다 현재 index 의 주식 가격이 적으면
        if p[i] < p[stack[-1]]:
            # stack 을 역으로 돌면서
            for j in stack[::-1]:
                # 값이 처음으로 떨어진 가격들에 대하여 시간을 계산하여 answer 에 넣어준다. 
                # 값이 떨어진 index 는 stack 에서 제거한다.
                if p[i] < p[j]:
                    ans[j] = i-j
                    stack.remove(j)
                else:
                    break
        stack.append(i)
    # 아직까지 stack 에 남아있는 값들은 마지막까지 값이 떨어지지 않은 주식가격들. 이를 계산하여 ans 에 넣어준다.
    for i in range(0, len(stack)-1):
        ans[stack[i]] = len(p) - stack[i] - 1
    return ans
常にforゲートを迂回し、現在のidxの株価よりも高い子供を排除します.すなわち、スタック内のidxには、株価がその時点以下であるidxのみが存在する.