코딩테스트/Java

(2019 카카오) 실패율 Java

SK_MOUSE 2020. 12. 21. 16:22
반응형

https://programmers.co.kr/learn/courses/30/lessons/42889

 

개념적인 측면에서 머릿속으로 계산하려니까 계속 어디선가 꼬였다..

 

lastStages[] 배열은 현재 못풀고 못넘어가고있는단계.

nStagePlayers 는 index값을 맞춰주기 위해 N+2 사이즈로 생성.

 

failure(실패율) =

nStagePlayers[id](해당 단계에 멈춰있는 중인 인원) / remainPlayers(다음스테이지로갈때마다 줄어듦)

 

위 부분을 계속해서 머릿속에서 꼬여서 못풀었다. 전혀 못풀 문제가 아닌데..내가 "stage에 머물러있는사람"이 된 기분이었다.. 다음스테이지로 갈때마다 "lastStages.length -= 현재단계에 머무는사람 수"를 시행하면 된다는 것을 명심하자.

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

class Solution {
    public int[] solution(int N, int[] lastStages) {
        int nPlayers = lastStages.length;
        int[] nStagePlayers = new int[N + 2];
        for (int stage : lastStages) {
            nStagePlayers[stage] += 1;
        }

        int remainingPlayers = nPlayers;
        List<Stage> stages = new ArrayList<>();
        for (int id = 1 ; id <= N; id++) {
            double failure = (double) nStagePlayers[id] / remainingPlayers;

            //다음단계도전자= 현재스테이지 못푼사람 빼주기
            remainingPlayers -= nStagePlayers[id];
            Stage s = new Stage(id, failure);
            stages.add(s);
        }
        Collections.sort(stages); //Comparble 메소드 @Override내림차순 정렬.

        int[] answer = new int[N];
        for (int i = 0; i < N; i++) {
            answer[i] = stages.get(i).id;
        }
        return answer;
    }

    class Stage implements Comparable<Stage> {
        public int id;
        public double failure;

        public Stage(int id_, double failure_) {
            id = id_;
            failure = failure_;
        }

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

id값을 필자는 해쉬셋(HashSet)을 이용해서 정렬하고 인덱스값을 출력하려고 했다.

 

하지만, 위 코더는 객체를 생성해서 Comparble메소드를 이용해 failure 값으로 정렬하고,

id(인덱스)값을 내림차순 순서대로 출력하는 방식을 적용했다.

개인적으로, 이 방식이 더 익숙해서 쉬운것같다.

 

객체를 이용해서 인덱스값 추출(출력)을 하는 방식을 잘 활용해야겠다.

반응형