코딩테스트
[코딩테스트(Java)] 프로그래머스 42889 실패율
inhooo00
2025. 3. 8. 15:00
728x90
https://school.programmers.co.kr/learn/courses/30/lessons/42889#
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
public int[] solution(int N, int[] stages) {
int[] answer = new int[N];
LinkedHashMap<Integer, Double> hashMap = new LinkedHashMap<>();
int over;
int same;
for (int i = 0; i < N; i++) {
over = 0;
same = 0;
for (int j = 0; j < stages.length; j++) {
if (stages[j] > i) {
over++;
}
if (stages[j] == (i + 1)) {
same++;
}
if (over == 0) {
hashMap.put(i + 1, 0.0);
} else {
hashMap.put(i + 1, same / (double) over);
}
}
}
System.out.println(hashMap.entrySet());
hashMap = hashMap.entrySet()
.stream()
.sorted(Map.Entry.<Integer, Double>comparingByValue().reversed())
.collect(Collectors.toMap(
Map.Entry::getKey,
Map.Entry::getValue,
(e1, e2) -> e1,
LinkedHashMap::new
));
int index = 0;
for (int key : hashMap.keySet()) {
answer[index++] = key;
}
return answer;
}
📍포인트
1. 순환해서 해당 스테이지보다 값이 크면 변수로 선언, 그 스테이지와 같은 값도 변수로 선언해서 실패율들을 구함
2. 실패율 기준으로 인덱스 내림차순 정렬
📍삽질
1. 실패율 기준으로 인덱스 내림차순 정렬하는데 인덱스를 어떻게 처리할지 고민하다가 LinkedHashMap 도입.
2. 분모값이 0이면 NaN이 떠버리는 상황이 발생 (반례). if문으로 한번 걸러주는 작업 필요.
3. 정렬을 위한 stream() 사용
728x90