알고리즘/Programmers

2019 카카오 신입 실패율 level 1 - java

kkoon9 2022. 2. 20. 20:54

 

 

코딩테스트 연습 - 실패율

실패율 슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프랜즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다. 원인은 신규 사용자와 기존 사용자 사이에 스

programmers.co.kr

Collection.reverseOrder() 메서드를 사용하여 풀이하였다.

stage 순서와 실패율을 가지는 클래스(Failure)를 선언해준 뒤, 정렬해주었다.

import java.util.*;

class Solution {
    public int[] solution(int N, int[] stages) {
        int[] answer = new int[N];
        int playerCount = stages.length;
        List<Failure> failures = new ArrayList<>();
        int[] nStagePlayers = new int[N+2];
        for (int stage : stages) {
            nStagePlayers[stage] += 1;
        }

        for(int i = 1;i<=N;i++){
            double failure = (double)nStagePlayers[i] / playerCount;
            failures.add(new Failure(i,failure));
            playerCount-= nStagePlayers[i];
        }
        Collections.sort(failures, Collections.reverseOrder());
        for(int i = 0 ;i<N;i++) {
            answer[i] = failures.get(i).stage;
        }
        return answer;
    }

    class Failure implements Comparable<Failure> {
        int stage;
        double fail;

        Failure(int stage, Double fail) {
            this.stage = stage;
            this.fail = fail;
        }

        @Override
        public int compareTo(Failure o) {
            if (fail < o.fail ) {
                return -1;
            }
            if (fail > o.fail ) {
                return 1;
            }
            return 0;
        }
    }
}

ㅁㄹㅁㅇㄴㅁㅇ

 

 

너무 Map만 사용하려는 습관이 있다.

N의 수가 적다면(10000이하) 배열도 고려해보자.