생각한 문제 유형 : 자료형 계산, 저장하기, 출력하기
소요 시간: 약 50분
HashMap을 써야하나 고민했다가, HashMap 정렬 방법을 도저히 모르겠어서, List로 변환하였음
원래 Node class를 생성해서 PriorityQueue로 출력하면 될 줄 알고 그렇게 진행했는데, Comparable이 잘 안되서 포기
ArrayList에 double형의 배열을 넣고, sort와 람다식을 이용해서 1번 인덱스 기준 정렬을 시켰음
Lv.1인데 쉽지가 않았다... 우선 sum에는 각 라운드별 남은 사람의 수를 저장. count는 stages 배열의 값을 counting 정렬하듯
정렬해 주었음. 그리고 double형 배열을 list에 넣고, 앞에는 스테이지 수, 뒤에는 double로 변환한 실패율을 저장하였다
또한 sum이 0인 경우가 생기기 때문에, sum[idx]의 값이 0인 경우 오류를 배제하기 위해 0인 경우는 0으로 처리해주었다
import java.util.*;
class Solution {
public int[] solution(int N, int[] stages) {
int[] answer = new int[N];
int[] sum = new int[N+1];
int[] count = new int[N+1]; // N+1 은 N스테이지까지 클리어한 사람이 있음
ArrayList<double[]> list = new ArrayList<>();
for(int i = 0; i < stages.length; i++) {
count[stages[i]-1]++;
}
sum[0] = stages.length;
for(int i = 1; i < N+1; i++){
sum[i] = sum[i-1] - count[i-1];
}
for(int i =0; i < N; i++){
if(sum[i] == 0 ){
list.add(new double[] {i+1, 0});
} else{
list.add(new double[] {i+1, (double) count[i]/(double) sum[i]}) ;
}
}
list.sort((a,b) -> Double.compare(b[1],a[1]));
for(int i = 0; i < list.size(); i++){
answer[i] = (int) list.get(i)[0];
}
return answer;
}
}