[#42889]2019 KAKAO BLIND RECRUITMENT失敗率-JavaScript


問題の説明



スーパーゲーム開発者のオレリーは大きな悩みに陥った.彼女が作ったブランド「呉天成」は大きな成功を収めたが、最近は新しいユーザーの数が激減している.なぜなら、新しいユーザーと既存のユーザーの間の舞台の違いが大きすぎるからです.
どうすればいいか悩んだ彼女は、ゲームの時間を動的に増やして難易度を調整することにした.やはりスーパー開発者であり、ほとんどのロジックは実現しやすいが、失敗率を探す部分で危機に陥っている.オレリーの失敗率を求めるコードを完了します.
  • 失敗率は次のように定義されます.
  • ステージに到達したがクリアされていないプレイヤー数/ステージのプレイヤー数
  • 現在停止しているステージ番号を含む配列フェーズをパラメータとして指定した場合は、失敗率の高いステージからステージ番号を含む配列を降順に返すように、ソルバを完了します.

    せいげんじょうけん

  • ステージの個数Nは1以上500以下の自然数である.
  • 段階の長さは1以上200000以下である.
  • 段階は、1以上N+1以下の自然数を含む.
  • 各自然数は、ユーザが現在挑戦しているステージの番号を示す.
  • 段、N+1は最後のステージ(Nステージ)にクリアしたユーザを表す.
  • 同じ失敗率の舞台があれば、まず小さいサイズの舞台がいいです.
  • プレイヤーが
  • ステージに到達しなかった場合、そのステージの失敗率は0と定義される.
  • I/O例



    I/O例説明


    I/O例#1
    1番ステージには8人のユーザーが挑戦し、そのうち1人のユーザーはまだ通関していない.そのため、1番ステージの失敗率は以下の通り.
  • 1 번 스테이지 실패율 : 1/8
  • 第2ステージには7人のユーザーが挑戦し、そのうち3人のユーザーはまだ通関していない.そのため、2番目の舞台の失敗率は以下の通りです.
  • 2 번 스테이지 실패율 : 3/7
  • 同様に、残りの舞台の失敗率は以下の通りである.
  • 3 번 스테이지 실패율 : 2/4
  • 4번 스테이지 실패율 : 1/2
  • 5번 스테이지 실패율 : 0/1
  • 各ステージの番号を失敗率の降順に並べます.
  • [3,4,2,1,5]
  • I/O例#2
    すべてのユーザが最後のステージにいるため、4番目のステージの失敗率は1であり、残りのステージの失敗率は0である.
  • [4,1,2,3]
  • に答える

    stagesの長さは도전한 사용자의 인원 수で、remnantの後に格納されます.
    ステップを繰り返して、ステップの長さをstages配列内でフィルタリングすれば、ステップ아직 클리어하지 못한 인원 수が分かる.
    次に[index 0]にi=対応するステップを入力し、[index 1]に아직 클리어하지 못한 인원 수/24579142を入れ、도전한 사용자의 인원 수 (실패율)配列にpush後
    ex) `failPer` 배열 
    [ [ 1, 0.125 ], [ 2, 0.42 ], [ 3, 0.5 ], [ 4, 0.5 ], [ 5, 0 ] ]failPerからremnantを取り除き、아직 클리어하지 못한 인원 수を貯蔵する.
    すべてのステップを返した後、다음 단계에 도전할 사용자의 인원 수配列[index 1]の降順に並べ替えます.
    [index 0]のみ抽出し、ステージ番号のみ出力します.
    function solution(N, stages) {
        let answer;
        let failPer = [];
        let remnant = stages.length;
        
        for(let i=1; i<=N; i++){
            
            const failNum = stages.filter( stage => stage === i ).length;
            failPer.push([i, failNum / remnant]);
            remnant -= failNum;      
        }
        failPer.sort( (a,b) => b[1] -a[1])
    
        answer = [...failPer.map( stage => stage[0])];   
        return answer;
    }