Algorithm/프로그래머스
프로그래머스 [42889] 실패율 -JAVA
youngjae-kim
2025. 3. 12. 20:43
728x90
반응형
문제
https://school.programmers.co.kr/learn/courses/30/lessons/42889
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
풀이
stages 배열을 돌면서 각 스테이지에 남아 있는 인원을 더해주기
각 스테이지의 실패율을 구하여 해당 스테이지에 대한 실패율을 리스트에 담기
리스트를 정렬 실패율이 높은 순서 -> 낮은 순서로 내림차순 정렬. 실패율이 같다면 작은 번호의 스테이지가 오도록 정렬 기준 정하기
정답 코드
package com.programmers.level1.p42889;
import java.util.*;
public class Solution {
public int[] solution(int N, int[] stages) {
int[] answer = {};
int[] arr = new int[N + 2];
// 배열을 돌면서 해당 스테이지에 남아있는 인원 더해주기
for (int i = 0; i < stages.length; i++) {
// N보다 크면 모든 스테이지를 통과한 사람이라 체크 x
if (stages[i] <= N + 1) {
arr[stages[i]]++; // 각 스테이지의 사람을 더해주기
}
}
int total = stages.length; // 전체 사람 수
List<Stage> list = new ArrayList<>();
// 1 ~ N까지 돌면서 실패율 구하기
for (int i = 1; i <= N; i++) {
double rate = total == 0 ? 0 : (double) arr[i] / total;
list.add(new Stage(i, rate));
total -= arr[i];
}
Collections.sort(list, new Comparator<Stage>() {
@Override
public int compare(Stage s1, Stage s2) {
if (s1.failure - s2.failure > 0) {
return -1;
} else if (s1.failure == s2.failure) {
return s1.idx - s2.idx;
} else {
return 1;
}
}
});
answer = new int[N];
for (int i = 0; i < answer.length; i++) {
answer[i] = list.get(i).idx;
}
return answer;
}
class Stage {
int idx; // 스테이지 번호
double failure; // 실패율
public Stage(int idx, double failure) {
this.idx = idx;
this.failure = failure;
}
}
}
- 실패율을 잘못 구하여 틀렸었다.
- Comparator를 익명으로 넣을 때 실수를 많이 하였다.
728x90
반응형