-Code
import java.util.*;
class Solution {
public int[] solution(int N, int[] stages) {
Map<Integer, Double> stageFailRate = new HashMap<>();
double total = stages.length;
for(int i = 1; i <= N; i++) stageFailRate.put(i, 0d);
for(int stage : stages) {
if (stageFailRate.containsKey(stage)) {
double val = stageFailRate.get(stage) + 1;
stageFailRate.put(stage, val);
}
}
for (int key : stageFailRate.keySet()) {
double val = stageFailRate.get(key) ;
stageFailRate.put(key, val == 0 ? 0 : val / total);
total -= val;
}
List<Integer> keySet = new ArrayList<>(stageFailRate.keySet());
keySet.sort((o1, o2) -> stageFailRate.get(o2)
.compareTo(stageFailRate.get(o1)));
return keySet.stream().mapToInt(Integer::intValue).toArray();
}
}
Map으로 받아서 value 값으로 정렬하는 법을 찾아보느라 좀 오래 걸렸습니다.
key값만 사용하기에 keySet으로 따로 리스트를 빼고 sort를 통해서 value의 값을 역순으로 정렬하는데 처음에는 익숙하지 않아서 찾아본 내용을 참고해서 아래와 같이 사용했습니다.
keySet.sort(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return stageFailRate.get(o1)
.compareTo(stageFailRate.get(o2));
}
});
그러나 ide에서 람다로 사용하는 방법을 알려줘서
keySet.sort((o1, o2) -> stageFailRate.get(o1)
.compareTo(stageFailRate.get(o2)));
위와 같이 변경했지만 오름 차순으로 나와서 역순으로 하는 방법을 찾아서 위의 코드 처럼 해결하게 되었습니다.
'Beakjoon&프로그래머스 > Java' 카테고리의 다른 글
[프로그래머스/Java] 옹알이 (2) (0) | 2025.02.27 |
---|---|
[프로그래머스/Java] 소수 만들기 (0) | 2025.02.27 |
[프로그래머스/Java] 소수 찾기 (0) | 2025.02.26 |
[프로그래머스/Java] 덧칠하기 (0) | 2025.02.26 |
[프로그래머스/Java] 과일 장수 (0) | 2025.02.26 |