-
[프로그래머스] 실패율개발공부/코딩테스트 연습문제 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)) 이렇게 사용
해시맵을 벨류값 기준으로 내림차순 정렬하는게 어려웠다. 여기저기 찾아봤지만 코드들이 다 장황해서..
그래서 그냥 정렬 코드를 짤까하다가 그건 또 귀찮았다.
'개발공부 > 코딩테스트 연습문제' 카테고리의 다른 글
[프로그래머스] 두 개 뽑아서 더하기 (0) 2022.01.10 [프로그래머스] 3진법 뒤집기 (0) 2022.01.10 [프로그래머스] 모의고사 (0) 2022.01.07 [프로그래머스] 약수의 개수와 덧셈 (0) 2022.01.07 [프로그래머스] K번째수 (0) 2022.01.06