プログラマーlv 1解答:失敗率(ココア)
11426 ワード
7月30日アルゴリズムの解答
プログラマーlv 1回答:失敗率
失敗率
失敗率は次のように定義されます. ステージに到達したがクリアされていないプレイヤー数/ステージのプレイヤー数 現在停止しているステージ番号を含む配列フェーズをパラメータとして指定した場合は、失敗率の高いステージからステージ番号を含む配列を降順に返すように、ソルバを完了します.
ステージ数Nは ステージの長さ: フェーズには、次のものが含まれます. 各自然数は、ユーザが現在挑戦しているステージの番号を示す. セグメント、 同じ失敗率の舞台があれば、まず小さいサイズの舞台がいいです. プレイヤーがステージに到着しなかった場合、そのステージの失敗率は
Nstagesresult5[2, 1, 2, 6, 2, 4, 3, 3][3,4,2,1,5]4[4,4,4,4,4][4,1,2,3]
I/Oサンプル#11ステージには8名のユーザーがチャレンジしており、そのうち1名のユーザーはまだクリアしていない.そのため、1番ステージの失敗率は以下の通り.第1期失敗率:1/82 第2ステージには7人のユーザーが挑戦し、そのうち3人のユーザーはまだ通関していない.そのため、2番目の舞台の失敗率は以下の通りです.第2期失敗率:3/7 同様に、残りの舞台の失敗率は以下の通りである.第3段階失敗率:2/4 第4期失敗率:1/ 第5期失敗率:0/1 各ステージの番号を失敗率の降順に並べます. [3,4,2,1,5] I/O例#2
すべてのユーザが最後のステージにいるため、4番目のステージの失敗率は1であり、残りのステージの失敗率は0である. [4,1,2,3]
プログラマーlv 1回答:失敗率
問題の説明
失敗率
スーパーゲーム開発者のオレリーは大きな悩みに陥った.彼女が作ったブランド「呉天成」は大きな成功を収めたが、最近は新しいユーザーの数が激減している.なぜなら、新しいユーザーと既存のユーザーの間の舞台の違いが大きすぎるからです.
どうすればいいか悩んだ彼女は、ゲームの時間を動的に増やして難易度を調整することにした.やはりスーパー開発者であり、ほとんどのロジックは実現しやすいが、失敗率を探す部分で危機に陥っている.オレリーの失敗率を求めるコードを完了します.
せいげんじょうけん
1
以上 500
以下は自然数です.1
以上 200,000
より低い1
以上 N + 1
以下の自然数を含む.N + 1
最後のステージ(Nステージ)にクリアしたユーザを表す.0
として定義されます.I/O例
Nstagesresult5[2, 1, 2, 6, 2, 4, 3, 3][3,4,2,1,5]4[4,4,4,4,4][4,1,2,3]
I/O例説明
I/Oサンプル#11ステージには8名のユーザーがチャレンジしており、そのうち1名のユーザーはまだクリアしていない.そのため、1番ステージの失敗率は以下の通り.
すべてのユーザが最後のステージにいるため、4番目のステージの失敗率は1であり、残りのステージの失敗率は0である.
説明する
function solution(N, stages) {
let numbers = {};
let result = [];
let sort = [];
// 스테이지와 해당 스테이지 통과를 저장할 배열을 그 수만큼 0으로 채워준다.
let stage = new Array(N).fill(0);
let fail = new Array(N).fill(0);
// 스테이지 수만큼 반복
for (let i = 0; i < stages.length; i++) {
// 해당 사용자가 도전한 스테이지까지 각 스테이지 도전횟수를 합산해줌
if (stages[i] > N) {
for (let j = 0; j < stages[i] - 1; j++) {
stage[j] = stage[j] + 1;
}
} else {
for (let j = 0; j < stages[i]; j++) {
stage[j] = stage[j] + 1;
}
}
// 스테이지 실패횟수
if (stages[i] <= N) {
fail[stages[i] - 1] += 1;
}
}
// 실패율 저장
for (let i = 0; i < stage.length; i++) {
numbers[i + 1] = fail[i] / stage[i];
}
// 객체를 정렬시키기 위해 새로운 배열에 저장
for (let i in numbers) {
sort.push([i, numbers[i]]);
}
// 객체 정렬
sort.sort((a, b) => {
return b[1] - a[1];
});
// 스테이지를 실패율에 맞게 출력.
for (let i in sort) {
result[i] = Number(sort[i][0]);
}
return result;
}
// 우선 몇명의 사용자가 몇번 스테이지 까지 클리어 했는지를 구별하여야함
// 생각나는 해결 방법은 이중 반복문을 사용하는것
// 예를 들면 5개의 스테이지가 있다면 5칸 짜리 배열을 생성하여 해당 자리에 몇명의 사용자가 도전했는지를 표시
Reference
この問題について(プログラマーlv 1解答:失敗率(ココア)), 我々は、より多くの情報をここで見つけました https://velog.io/@younghoss/프로그래머스-lv1-문제-풀이-실패율-카카오テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol