728x90
Fail클래스를 따로 선언하여 stage와 실패율 2개 변수를 저장함
stage에 따른 users를 for문으로 따로 저장해주고
실패율을 계산해줌
comparator클래스를 활용해
실패율이 높은 순으로 정렬하고, 실패율이 같은 경우에는
stage가 낮은 순으로 정렬한다
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 78 79 80 81 82 | import java.util.*; class Solution { static class Fail{ int stage; double rate; Fail(int stage,double rate){ this.stage = stage; this.rate = rate; } } public int[] solution(int N, int[] stages) { int[] answer = new int[N]; Arrays.sort(stages); int index = 1; int numP = stages.length; int numI = 0; List<Fail> fails = new ArrayList<Fail>(); int[] users = new int[N+1]; int total = stages.length; for (int s : stages) { users[s-1]++; } for (int i : users) { System.out.println(i); } for(int i=0; i<N; i++) { if(users[i]==0) { fails.add(new Fail(i+1,0)); } else { fails.add(new Fail(i+1,(double)users[i]/total)); total-=users[i]; } } for (Fail i : fails) { System.out.println(i.rate); } Comparator<Fail> comp = new Comparator<Fail>() { @Override public int compare(Fail a, Fail b) { // TODO Auto-generated method stub if(a.rate < b.rate) { return 1; } else if(a.rate > b.rate) { return -1; } else { if(a.stage>b.stage) { return 1; } else if(a.stage<b.stage) { return -1; } } return 0; } }; Collections.sort(fails,comp); // 이게 어떤식으로 sorting이 되는지 알아야함 // 아니면 해쉬맵을 이용해야하나또? 그래서 for (int i = 0; i < N; i++) { answer[i]=fails.get(i).stage; } return answer; } } |
참고 : https://www.youtube.com/watch?v=hmHparvw4Wo
'알고리즘 풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스][Java] K번째 수 (0) | 2019.02.22 |
---|---|
[프로그래머스][Java] 모의고사 (0) | 2019.02.22 |
[프로그래머스][Java] 무지의 먹방 라이브 (0) | 2019.02.21 |
[프로그래머스][Java] 오픈채팅방 (0) | 2019.02.20 |
[프로그래머스][Java] 완주하지 못한 선수 (0) | 2019.02.20 |