import java.util.*;
class Solution {
public int[] solution(int N, int[] stages) {
int[] answer = new int[N];
HashMap<Integer, Double> map = new HashMap<>(); // 스테이지 번호, 실패율
int users = stages.length; // 총 참여 인원
double rate = 0; // 실패율
for(int i = 1; i <= N; i++){
int count = 0; // 실패자 카운트
for(int j = 0; j < stages.length; j++){
// ex) 1번 스테이지(N) 다 돌며 1번 실패자 찾기.
if(i == stages[j]){
count++;
}
}
if(users == 0) {
rate = 0;
} else {
rate = (double) count / users;
}
map.put(i, rate);
users = users - count;
}
// 실패율 정렬(내림차)
List<Map.Entry<Integer, Double>> list =
new ArrayList<>(map.entrySet());
list.sort(Map.Entry.<Integer, Double>comparingByValue().reversed());
for(int i = 0; i < N; i++){
answer[i] = list.get(i).getKey();
}
return answer;
}
}
HashMap을 이용해 stage 마다 실패율 저장.users -= count 처리.HashMap = 저장용
List<Entry> = 정렬용 변환 구조
Comparator = 정렬 기준
-------------------------------------------------------------------------
✔ comparingByValue()
- value 기준 정렬
- 기본은 오름차순
✔ reversed()
- 정렬 방향 반전 → 내림차순
- list.sort(Map.Entry.<Integer, Double>comparingByValue().reversed());
☞ 실패율 높은 순으로 정렬
+추가 정리
✔ comparingByKey()
key 기준 정렬 가능
스테이지 번호 기준 정렬할 때 사용
처음에는 문제 설명이 직관적으로 와닿지 않아 혼란이 있었지만,
“현재 스테이지 = 아직 클리어하지 못한 위치”라는 구조를 이해한 뒤 풀이 방향이 명확해졌다.