본문 바로가기

PS/프로그래머스

프로그래머스 2019 KAKAO BLIND RECRUITMENT - 실패율[JAVA]

문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/42889

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

코드:

 

import java.util.*;

class Stage implements Comparable<Stage>{
    int number;
    float rate;

    public Stage(int number, float rate) {
        this.number = number;
        this.rate = rate;
    }

    @Override
    public int compareTo(Stage o) {
        int compare = Float.compare(o.rate, rate);
        if(compare == 0) return number - o.number;
        else return compare;
    }
}
class Solution {
    public int[] solution(int N, int[] stages) {
        int[] answer = new int[N];
        int[] count = new int[N + 2]; // count[i]: i 스테이지에 도달하고 멈춘 인원
        List<Stage> list = new ArrayList<>();

        for (int i = 0; i < stages.length; i++) {
            count[stages[i]]++;
        }

        for (int i = 1; i <= N; i++) {
            int sum = 0; // i 스테이지에 도달한 플레이어 수 (넘어간 플레이어 포함)
            for (int j = i; j <= N + 1; j++) {
                sum += count[j];
            }
            list.add(new Stage(i, calc(count[i], sum)));
        }

        Collections.sort(list);
        for (int i = 0; i < N; i++) {
            answer[i] = list.get(i).number;
        }
        return answer;
    }

    private float calc(int cnt, int sum) {
        if(sum == 0) return 0f;
        return ((float) cnt) / sum;
    }
}