전체 스테이지의 개수 N, 게임을 이용하는 사용자가 현재 멈춰있는 스테이지의 번호가 담긴 배열 stages가 매개변수로 주어질 때, 실패율이 높은 스테이지부터 내림차순으로 스테이지의 번호가 담겨있는 배열을 return하는 solution 함수를 작성하는 문제이다.
각 스테이지의 도전자 수와 클리어하지 못한 도전자의 수를 구한 다음, 실패율을 계산하고, 내림차순으로 정렬한다.
class Solution {
public int[] solution(int N, int[] stages) {
int[] answer = new int[N];
for (int i = 0; i < answer.length; i++) {
answer[i] = i+1;
}
// 각 스테이지 도전자 수, 도달했으나 클리어하지 못한 사용자
int[][] cha = new int[N][2];
for (int i = 0; i < N; i++) {
for (int j = 0; j < stages.length; j++) {
if (stages[j] >= i+1) {
cha[i][0]++;
if(stages[j] == i+1)
cha[i][1]++;
}
}
}
// 실패율
double[] rate = new double[N];
for (int i = 0; i < cha.length; i++) {
rate[i] = (double)cha[i][1] / cha[i][0];
}
// 정렬
for (int i = rate.length-1; i > 0; i--) {
for (int j = 0; j < i; j++) {
if (rate[i] > rate[j]) {
double tmp = rate[i];
rate[i] = rate[j];
rate[j] = tmp;
int atmp = answer[i];
answer[i] = answer[j];
answer[j] = atmp;
} else if (rate[i] == rate[j] && answer[i] < answer[j]) {
int atmp = answer[i];
answer[i] = answer[j];
answer[j] = atmp;
}
}
}
return answer;
}
}