[プログラマー]-株価(javascript)



問題の説明
秒単位で記録された株価の配列価格をパラメータとして指定すると、価格が下がらない時間帯に数秒戻るように解く関数が完了する.
せいげんじょうけん
価格はそれぞれ1以上10000以下の自然数です.
価格の長さは2以上100000以下です.

I/O例説明
  • 1秒の1はずっと値下げしていません.
  • 2秒の2はずっと値下げしていません.
  • 3秒の3は1秒後に値下げされます.そのため、価格は1秒以内に下がっていない.
  • 4秒の2は1秒で値下げされませんでした.
  • 5秒の3は0秒以内に値下げされませんでした.
  • 問題を理解する
    価格配列の各株の価格は数秒下落しないことを要求している.
    起こり得る状況を考える.
    1.現在位置の株価が次位置の株価より低い場合、
    2.現在位置の株価が次の位置の株価より大きい場合、
    3.現在位置の株式が最後の位置である場合
    このように3つです.この場合、数を求めるために、ドアを並べた大きさで回動させ、現在位置株価値を含む変数と、比較する株価(現在位置+1)を含む変数と、価格が下がっていない時間を含む変数を作ります.
    次にwhile文で配列サイズにのみ変換する大きな条件を設定し、if文に条件を作成する3つの場合の数値を処理します.
    首都コード
  • 価格のn位の株価はn+1,n+2...大きいかどうかを比較して、数秒以内に価格が下がらないと計算します.
  • 価格でドアを並べ、n[i]値をスタックに格納し、比較対象jをi+1値に入れる.
  • で、ドアは並べ替えの大きさで行われます.3つの条件のifゲートを計算した.
  • 私の株が次の株より小さいか等しい場合、次の株の価格より大きい場合、最後の株の条件を計算し、結果表に値をプッシュします.
  • マイコード
    function solution(n){
        let result = []
        for (let i = 0; i < n.length; i++){
            let stack = n[i] // 현재 주식 가격
            let j = i + 1 // 비교 할 수의 index
            let temp = 0; // 가격이 떨어지지 않은 시간
    
            while(j < n.length + 1){ // j < 6 이면 진행
                if (stack <= n[j]){ // 1. 나의 주식 가격이 다음 주식 가격보다 작거나 같으면 통과.
                    temp += 1;
                    j += 1;
                    continue; // if문 끝냄 while문으로
                }
                else if (temp == 0 && stack > n[j]){ // 2. 나의 주식 가격이 다음 주식 가격보다 크면 종료.
                    temp = 1;
                    result.push(temp);
                    temp = 0;
                    break; // while문 끝냄
                }
                else if (temp == 0 && j == n.length){ // 3. 마지막 주식이면 0 반환.
                    console.log(j)
                    result.push(temp);
                    break; // while문 끝냄
                }
                result.push(temp)
                temp = 0;
                break;
            }
        }
        return result;
    }
    
    console.log(solution([1, 2, 3, 2, 3]))
    整理する
    これは資料構造の積み重ねの問題です.