728x90
- 제출 코드
import java.util.Arrays;
import java.util.Comparator;
class Solution {
public int[] solution(int N, int[] stages) {
int[] answer = new int[N];
double[][] fail = new double[N][2];
int len = stages.length;
for(int i=1;i<N+1;i++) fail[i-1][0] = i;
Arrays.sort(stages);
int i=0;
for(int stage=1;stage<=N;stage++){
double arrive_nc = 0.0;
double arrive = 0.0;
for(;i<len;){
if(stages[i]==stage){
arrive_nc += 1.0;
}
else if(stages[i]>stage){
arrive = len - i + arrive_nc;
break;
}
i++;
}
if(arrive_nc != 0 && arrive == 0) arrive = arrive_nc;
if(arrive!=0) fail[stage-1][1] = arrive_nc / arrive;
else fail[stage-1][1] = 0;
}
Arrays.sort(fail, new Comparator<double[]>() {
@Override
public int compare(double[] o1, double[] o2){
return Double.compare(o2[1], o1[1]);
}
});
for(i=0;i<N;i++){
answer[i] = (int)fail[i][0];
}
return answer;
}
}
실패율에 따라 배열을 정렬하면서도 기존의 인덱스인 stage를 기억해서 answer에 저장해야한다는 점이 어려웠다.
2차원 double 배열 fail에 stage와 실패율을 저장한 후 저번에 배운 2차원 배열 정렬을 이용해서 해결했다.
2차원 배열말고 새로운 클래스를 정의할 수 있다는 걸 다른 사람의 풀이를 보면서 알게 되었다.
그 외의 차이점은 각 stage의 사람의 수를 nStagePlayers[stage]++;과 같이 저장한 뒤
failure = nStagePlayers[i] / remainingPlayers; remainingPlayers -= nStagePlayers[i]; 와 같이 구했다는 점이었다.
'알고리즘 > 코딩 테스트 문제' 카테고리의 다른 글
[프로그래머스] 완주하지 못한 선수(Java) (0) | 2023.10.21 |
---|---|
[프로그래머스] 옹알이(2)(Java) (0) | 2023.10.18 |
[프로그래머스] 기사단원의 무기(Java) (0) | 2023.10.16 |
[프로그래머스] 소수 만들기(Java) (0) | 2023.10.13 |
[프로그래머스] 카드 뭉치(Java) (0) | 2023.10.11 |