https://school.programmers.co.kr/learn/courses/30/lessons/42889
맵을 사용하여 풀이하였다. 또한 키값에 대한 value의 정렬이 필요했다.
import java.util.*;
class Solution {
public int[] solution(int N, int[] stages) {
int[] stage = new int[N+2]; //1:1 대응
int tmp = stages.length; //총 인원수
//인덱스 자체가 스테이지, 값은 인원수
for(int i = 0; i < stages.length; i++) {
stage[stages[i]]++;
}
HashMap<Integer, Double> map = new HashMap<>();
int tme = 0;
for(int i = 1; i < stage.length -1; i++) {
// 틀린사람이 없음
if(stage[i] == 0){
map.put(i,0.0);
}else{ // 실패율 저장 (key는 스테이지, 값은 실패율);
map.put(i,(double)stage[i] / (tmp - tme));
tme += stage[i]; // 저장완료된 인원
}
}
// value를 기준으로 key값을 역정렬한다.
List<Integer> list = new ArrayList<>(map.keySet());
Collections.sort(list,((o1, o2) -> Double.compare(map.get(o2), map.get(o1))));
int[] answer = new int[list.size()];
for(int i = 0; i < answer.length; i++){
answer[i] = list.get(i);
}
return answer;
}
}