https://programmers.co.kr/learn/courses/30/lessons/42889
레벨 1 문제라고 쉽게 봤지만 역시 카카오문제는 호락호락하지 않았다.
정렬부분과
N=5, [2,2,2] 의 경우를 고려하면서 푸는게 어려웠다.
정렬부분에서 1. collections 함수의 정렬과 2. 삽입정렬 직접 구현하여 풀었다.
import java.util.Arrays;
import java.util.ArrayList;
import java.util.Collections;
class Solution {
static class rate{
int stage;
double percent;
public rate(int stage,double percent){
this.stage = stage;//단계
this.percent = percent;//실패율
}
}
public int[] solution(int N, int[] stages) {
int[] answer = new int[N];
int userCnt = stages.length;
int[] noSuc = new int[N+1+1];//해당 스테이지를 못 깬 사람 수
ArrayList<rate> arr = new ArrayList<>();//단계별 실패율
for(int i:stages){
noSuc[i] += 1;
}
for(int i=1;i<=N;i++){
Double db;
if(noSuc[i]!=0) db = Double.valueOf(noSuc[i])/Double.valueOf(userCnt);
else db = 0.0;
arr.add(new rate(i,db));
userCnt-=noSuc[i];
}
// 1.fail rate가 높은 순으로 sorting
//Collections.sort(arr, ((o1, o2) -> Double.compare(o2.percent, o1.percent)));
// 2.삽입정렬
for(int i=1; i<N; i++){
for(int j=i; j>=1; j--){
if(arr.get(j).percent > arr.get(j-1).percent){
rate temp = arr.remove(j);
arr.add(j-1,new rate(temp.stage,temp.percent));
}else break;
}
}
for(int i=0;i<arr.size();i++){
answer[i]=arr.get(i).stage;
}
return answer;
}
}