JuSeok

실패율

문제

  • https://programmers.co.kr/learn/courses/30/lessons/42889
문제 해결 순서
  1. 프로그래머스는 정답 자료형이 정해져 있어서 int형 배열로 바꾸는 부분에서 애를 먹었다.
  2. 기본적인 아이디어로는 실패율을 계산해 <스테이지, 실패율>해시맵에 저장함. 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; } } ```

Tags