실패율
문제
- https://programmers.co.kr/learn/courses/30/lessons/42889
문제 해결 순서
- 프로그래머스는 정답 자료형이 정해져 있어서 int형 배열로 바꾸는 부분에서 애를 먹었다.
- 기본적인 아이디어로는 실패율을 계산해 <스테이지, 실패율>해시맵에 저장함.
3. 해시맵을 정렬하는데 실패율순으로 정렬하고 만약 같으면 스테이지 순으로 정렬함.
4. 이 과정에서 리스트를 배열로 바꾸는 부분에 시간을 많이 투자함. 다시 풀면 좀 더 깔끔하게 풀 수 있을듯.
```java
import java.util.*;
class Solution {
public static int[] solution(int N, int[] stages) {
int[] answer;
int[] temp = new int[N + 2];
// 실패율 저장 배열
HashMap failHash = new HashMap<>();
int user = stages.length;
Arrays.sort(stages);
for (int i = 0; i < user; i++){
// 각 스테이지에 머무르고 있는사람 저장
temp[stages[i]]++;
}
for (int i = 1; i < N + 1; i++){
if (temp[i] != 0){
failHash.put(i, (float)temp[i] / (float)user);
user -= temp[i];
}
else{
failHash.put(i, 0f);
}
}
answer = sortByValue(failHash);
return answer;
}
public static int[] sortByValue(final Map map) {
List list = new ArrayList();
list.addAll(map.keySet());
Collections.sort(list,new Comparator() {
public int compare(Object o1,Object o2) {
Object v1 = map.get(o1);
Object v2 = map.get(o2);
if (v1.equals(v2)){
return ((Comparable) o2).compareTo(o1);
}
return ((Comparable) v1).compareTo(v2);
}
});
Collections.reverse(list);
int[] temp = new int[list.size()];
for (int i = 0; i < list.size(); i++){
temp[i] = list.get(i);
}
return temp;
}
}
```