코딩테스트

[코딩테스트(Java)] 프로그래머스 42889 실패율

inhooo00 2025. 3. 8. 15:00

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() 사용