プログラマ(Java)-失敗率
22854 ワード
質問リンク
https://programmers.co.kr/learn/courses/30/lessons/42889
問題を解く
i段階を過ぎていない人は成功[i-1]で表します.
各フェーズの失敗率はパーセンテージ配列で表されます.
stagesは全員、sumは第1段階から失敗者数の累計数です.
stages.length-sumはこの段階に挑戦する人数となっている.
ex)
8人のうち1人が失敗した場合、%[0]=1/8
第2段階の失敗者は2名で、李明%[1]=2/(8-1)、2/7であった.
失敗率とidxを持つクラスを作成し、compareToを介して
失敗率が高い順、失敗率が同じ順が番号の低い順です.
PriorityQueueに預けたいです.
行列の中で一番前の順番で答えの列に入れればいいです.
https://programmers.co.kr/learn/courses/30/lessons/42889
問題を解く
i段階を過ぎていない人は成功[i-1]で表します.
各フェーズの失敗率はパーセンテージ配列で表されます.
int [] success = new int[N+1]; // success[0] 의 값은 1번 스테이지를 못깬사람
for(int i =0; i<stages.length; i++){
success[stages[i]-1]++;
}
i回目の失敗率の成功[i]/stageを得る.length-sumstagesは全員、sumは第1段階から失敗者数の累計数です.
stages.length-sumはこの段階に挑戦する人数となっている.
ex)
8人のうち1人が失敗した場合、%[0]=1/8
第2段階の失敗者は2名で、李明%[1]=2/(8-1)、2/7であった.
int sum=0;
for(int i=0; i<percent.length;i++){
percent[i]=(float)success[i]/(stages.length-sum);
sum+=success[i];
pq.add(new Score(i+1,percent[i]));
}
値のidxは、より高い失敗率の順序で返さなければなりません.失敗率とidxを持つクラスを作成し、compareToを介して
失敗率が高い順、失敗率が同じ順が番号の低い順です.
PriorityQueueに預けたいです.
class Score implements Comparable<Score>{
int idx;
float percent;
public Score(int idx, float percent){
this.idx = idx;
this.percent = percent;
}
public int compareTo(Score o){
if(this.percent>o.percent){
return -1;
}else if(this.percent<o.percent){
return 1;
}else{
if(this.idx>o.idx){
return 1;
}else{
return -1;
}
}
}
public String toString(){
return idx+"";
}
}
PriorityQueue<Score>pq = new PriorityQueue<>(); //스테이지번호, 실패율을 담을 큐
pq.add(new Score(i+1,percent[i])); //pq에 add될때마다 스테이지 번호가 높은 순서대로 정렬된다.
すべての値がキューに入り、ソートされます.行列の中で一番前の順番で答えの列に入れればいいです.
for(int i=0; i<answer.length;i++){
answer[i] = pq.peek().idx;
pq.remove();
}
コード#コード#import java.util.*;
public class FailureRate {
class Score implements Comparable<Score>{
int idx;
float percent;
public Score(int idx, float percent){
this.idx = idx;
this.percent = percent;
}
public int compareTo(Score o){
if(this.percent>o.percent){
return -1;
}else if(this.percent<o.percent){
return 1;
}else{
if(this.idx>o.idx){
return 1;
}else{
return -1;
}
}
}
public String toString(){
return idx+"";
}
}
class Solution {
public int[] solution(int N, int[] stages) {
int[] answer = new int[N]; //결과
PriorityQueue<Score>pq = new PriorityQueue<>(); //스테이지번호, 실패율을 담을 큐
int [] success = new int[N+1]; // success[0] 의 값은 1번 스테이지를 못깬사람
for(int i =0; i<stages.length; i++){
success[stages[i]-1]++;
}
float [] percent = new float[N];
int sum=0;
for(int i=0; i<percent.length;i++){
percent[i]=(float)success[i]/(stages.length-sum);
sum+=success[i];
pq.add(new Score(i+1,percent[i]));
}
for(int i=0; i<answer.length;i++){
answer[i] = pq.peek().idx;
pq.remove();
}
return answer;
}
}
}
Reference
この問題について(プログラマ(Java)-失敗率), 我々は、より多くの情報をここで見つけました https://velog.io/@courage331/실패율テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol