개발공부/코딩테스트 연습문제
[프로그래머스] 실패율
ku-na
2022. 1. 10. 10:27
문제 설명과 제한사항

풀이
import java.util.*;
class Solution {
public int[] solution(int N, int[] stages) {
int[] answer = new int[N];
int[] reach = new int[N+1]; //도달한 스테이지
int[] stay = new int[N+2]; //머물고 있는 스테이지
Map<Integer,Double> fail = new HashMap<Integer,Double>();
for(int i = 0; i < stages.length; i++){
stay[stages[i]]++;
}
reach[N] = stay[N] + stay[N+1];
for(int i = N-1 ; i > 0 ; i--){
reach[i] = stay[i] + reach[i + 1];
}
for(int i = 1; i < N+1; i++){
if(reach[i] == 0){
fail.put(i,0.0);
continue;
}
fail.put(i,(double)stay[i]/reach[i]);
}
List<Integer> keySetList = new ArrayList<>(fail.keySet());
Collections.sort(keySetList, (o1, o2) -> (fail.get(o2).compareTo(fail.get(o1))));
int i = 0;
for(Integer key : keySetList){
if(key <= N && key > 0) {
answer[i] = key;
i++;
}
}
return answer;
}
}
++
지난주에 풀다가 시간이 없어서 다시 푼 문제
1. Map<Integer,Double> fail = new HashMap<Integer,Double>(); 해시맵 선언
ㄴ import java.util.Map && HashMap -> import java.uti;.*;
2. fail.put(i,(double)stay[i]/reach[i]); : 해시맵 put
3. List<Integer> keySetList = new ArrayList<>(fail.keySet());
Collections.sort(keySetList, (o1, o2) -> (fail.get(o2).compareTo(fail.get(o1))));
해시맵을 밸류 중심으로 정렬하기 위해서 fail 해시맵으로 리스트를 만들고
콜랙션에서 내림차순으로 정렬하기 위해 (o1, o2) -> (fail.get(o2).compareTo(fail.get(o1)) 이렇게 사용
해시맵을 벨류값 기준으로 내림차순 정렬하는게 어려웠다. 여기저기 찾아봤지만 코드들이 다 장황해서..
그래서 그냥 정렬 코드를 짤까하다가 그건 또 귀찮았다.