본문 바로가기
문제풀이

카카오 2019 공채 실패율 문제 JAVA 풀이

by AndoneKwon 2020. 9. 16.

굉장히 단순한 문제였는데 stage순서로 정렬을 하고 stage배열 안에 들어가있는 개수가 그 stage에 도달한 사람이고 배열안에 있는 숫자가 도달했으나 클리어하지 못한 사람이다.

참조한 배열의 요소를 하나씩 지워가며 실패율을 계산하고 그것을 다시 정렬해주면 끝나는 문제다.

계속 여러가지가 컴파일에러가 발생했는데.. 그것은 그 스테이지에 도달한 사람이 없을 경우 0으로 처리하는 예외처리를 해주지 않아서 발생한 문제였다..

import java.io.*;
import java.util.*;
import java.util.Collections;

class stage{
    int stage;
    float failer;

    stage(int a, float b){
        this.stage = a;
        this.failer = b;
    }
}

class Solution {
    public int[] solution(int N, int[] stages) {
        int[] answer = new int[N];
        ArrayList<stage> st = new ArrayList<>();
        Deque<Integer> stageslist = new ArrayDeque<Integer>();
        Arrays.sort(stages);
        ArrayList<Integer> answerList = new ArrayList<>();
        for(int item :stages){
            stageslist.add(item);
        }
        for(int i=1;i<N+1;i++){
            int arrive=stageslist.size();
            int nonclear=0;
            for(int item:stageslist){
                if(item==i){
                    nonclear++;
                    stageslist.removeFirst();
                }
            }
            if(arrive==0){
                st.add(new stage(i,0));
                continue;
            }
            float failer = (float) nonclear/arrive;
            st.add(new stage(i,failer));
        }

        Collections.sort(st, new Comparator<stage>() {
            @Override
            public int compare(stage o1, stage o2) {
                if(o1.failer>o2.failer){
                    return -1;
                }else if(o1.failer==o2.failer){
                    return 0;
                }else{
                    return 1;
                }

            }
        });

        for(int i=0;i<N;i++){
            answer[i]=st.get(i).stage;
        }

        return answer;
    }
}

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