Level1) 실패율
2021. 3. 16. 21:23ㆍPS/programmers
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | import java.util.Arrays; import java.util.Comparator; /* 1 <= N <= 500 (스테이지번호) 1 <= stages.length <= 200,000 (사람수) 1 <= stages.val <= N+1 (실패한 스테이지) N+1 은 마지막까지 클리어했다는 뜻 실패율이 높은순서로 정렬, 실패율이 같다면 낮은 라운드부터 정렬 */ class Stage { int stage; double failure; public Stage(int stage, double failure) { this.stage = stage; this.failure = failure; } } public class Level1_실패율 { public static int[] solution(int N, int[] stages) { int[] ans = new int[N]; // 총 시도한 사람 수 int people = stages.length; // 각 스테이지에서 실패한 사람 수 구하기 int[] failPersonCountForStage = new int[N+2]; for (int stage : stages) { failPersonCountForStage[stage]++; } // 각 스테이지에 대한 실패율 구하기 double[] failure = new double[N+2]; for (int i = 1; i < N+1; i++){ if (people == 0) { failure[i] = 0; } else { failure[i] = (double) failPersonCountForStage[i] / people; } people -= failPersonCountForStage[i]; } // ans1. 실패율이 높은 순서대로 스테이지 번호를 정렬 // ans2. 실패율이 같다면 스테이지 번호가 낮은 순서로 정렬 Stage[] stage = new Stage[N]; for (int i = 0; i < stage.length; i++){ stage[i] = new Stage(i+1, failure[i+1]); } Arrays.sort(stage, new Comparator<Stage>() { @Override public int compare(Stage s1, Stage s2){ return Double.compare(s2.failure, s1.failure); } }); for(int i = 0; i < ans.length; i++){ ans[i] = stage[i].stage; } return ans; } public static void main(String[] args) { int[] stages = {2, 1, 2, 6, 2, 4, 3, 3}; int N = 5; int[] solution = solution(N, stages); for (int a : solution) { System.out.print(a + " "); } } } | cs |
'PS > programmers' 카테고리의 다른 글
Level1) 다트게임 (0) | 2021.04.27 |
---|---|
Level1) 비밀지도 (0) | 2021.03.17 |
Level1) 예산 (0) | 2021.03.16 |
Level2) 전화번호 목록 (0) | 2021.01.08 |
Level2)가장 큰 수 (0) | 2020.11.10 |