반응형
🔐 문제 설명
https://school.programmers.co.kr/learn/courses/30/lessons/42889
🔐 문제 분석
- 총 스테이지 수(N)와 스테이지 정보(stages)를 탐색하며 실패율을 맵(key=스테이지 번호, value=실패율)에 담는다.
- 맵을 실패율의 내림차순으로 정렬하고 실패율이 같을 경우는 스테이지 번호의 오름차순으로 정렬한다.
- 정렬된 결과를 반환한다.
🔐 문제 풀이
import java.util.*;
class Solution {
public int[] solution(int N, int[] stages) {
int[] answer = new int[N];
Map<Integer, Double> fail = new HashMap<>();
// 스테이지별 실패율 구하기
for (int i = 1; i <= N; i++) {
int challenger = 0; // 도전자 수
int failUser = 0; // 실패한 사용자 수
for (int j = 0; j < stages.length; j++) {
if (i <= stages[j]) {
challenger++;
}
if (i == stages[j]) {
failUser++;
}
}
fail.put(i, challenger == 0 ? 0 : ((double) failUser / challenger));
}
// 실패율 정렬
List<Map.Entry<Integer, Double>> entryList = new ArrayList<>(fail.entrySet());
entryList.sort((o1, o2) -> {
if (o1.getValue().equals(o2.getValue())) {
return o1.getKey() - o2.getKey();
} else {
return o2.getValue().compareTo(o1.getValue());
}
});
// 결과반환
int idx = 0;
for (Map.Entry<Integer, Double> map : entryList) {
answer[idx++] = map.getKey();
}
return answer;
}
}
반응형
'Algorithm' 카테고리의 다른 글
[프로그래머스] Lv1. 기사단원의 무기 (0) | 2023.07.01 |
---|---|
[프로그래머스] Lv1. [1차] 다트 게임 (0) | 2023.06.29 |
[프로그래머스] Lv1. 명예의 전당 (1) (0) | 2023.06.25 |
[프로그래머스] Lv1. 소수 찾기 (0) | 2023.06.24 |
[프로그래머스] Lv1. 소수 만들기 (0) | 2023.06.24 |