import java.util.*; import java.util.Map.Entry; class Solution { static class Rate{ // 해당 층과 실패율을 저장하는 클래스 int index; double rate; public Rate(int index, double rate){ this.index = index; this.rate = rate; } } public int[] solution(int N, int[] stages) { ArrayList<Rate> arr = new ArrayList<>(); for(int i=1; i<=N; i++){ // 해당스테이지만큼 int allUser=0; // 해당 스테이지 도착한 유저 int noClearUser=0; // 해당 스테이지 깨지못한 유저 for(int j=0; j<stages.length; j++){ // 해당 스테이지보다 크거나 같으면 유저 ++ if(i<=stages[j]){ allUser++; } // 해당 스테이지랑 같으면 깨지 못한 유저 ++ if(i==stages[j]){ noClearUser++; } } double failRate=0; if(allUser!=0){ failRate = (double)noClearUser/allUser; } Rate temp = new Rate(i,failRate); arr.add(temp); } // failRate에 대하여 내림차순 정렬 Collections.sort(arr, ((o1,o2) -> Double.compare(o2.rate,o1.rate))); int[] answer = new int[N]; for(int i=0; i<N; i++){ answer[i] = arr.get(i).index; //정렬된 순서대로 스테이지 저장 } return answer; } }
두개의 값을 연결해서 접근하기 위해서는 HashMap을 활용하면 되겠다 싶었지만 class를 만들어서 접근하고 정렬하는 방법이 더 편하고 코드가 깔끔했다.
상황에 따라 HashMap과 class를 만들어서 잘 활용해야겠다.