문제풀이/코딩테스트
프로그래머스 실패율 [Java]
gyungmean
2022. 3. 3. 23:35
문제출처
https://programmers.co.kr/learn/courses/30/lessons/42889
import java.util.*;
class Solution {
public int[] solution(int N, int[] stages) {
Map<Integer, Double> rate = new HashMap<>();
for(int i = 1; i <= N; i++){
int stage_count = 0; //클리어하지 못 한 사람 수
int user_count = 0; //도전한 사람 수
for(int s : stages){
if(s >= i) { user_count++; }
if(s == i) { stage_count++;}
}
if(user_count == 0){
rate.put(i, 0.0);
}
else{
rate.put(i, (double)stage_count / user_count);
}
}
List<Map.Entry<Integer, Double>> fail_list = new LinkedList<>(rate.entrySet());
fail_list.sort((o1, o2) -> o2.getValue().compareTo(o1.getValue()));
int[] answer = new int[N];
int idx = 0;
for(Map.Entry<Integer, Double> f : fail_list){
answer[idx++] = f.getKey();
}
return answer;
}
}
문제가 안풀릴때 늘 먼저 생각해야하는 것 : 최소한 문제에서 알려준 제한사항을 모두 지켰는가?
내가 안 풀렸던 경우는 제한사항에서
- 스테이지에 도달한 유저가 없는 경우 해당 스테이지의 실패율은 0 으로 정의한다.
이부분을 간과하고 있었다. user_count == 0인 경우를 따로 빼주니 바로 해결됨.
문제에서 제시하는 제한사항을 최소한 다 지키고 나서 안 풀린다고 고민을 해야겠다...
다른 사람 풀이를 보니 class를 따로 빼서 하는 경우도 있고 라이브러리를 하나도 import하지 않고 푸는 방법도 있던데 자바의 사용법은 정말 무궁무진하다를 깨닫고 있다.