Lv.1 [kakao-실패율]

문제

문제링크

코드

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를 만들어서 잘 활용해야겠다.

좋은 웹페이지 즐겨찾기