[오늘부터 알고리즘] #2-1 구현 알고리즘 - 실패율

ma·2026년 5월 12일
post-thumbnail

💻 오늘의 문제

풀이 과정

import java.util.*;

class Solution {
    public int[] solution(int N, int[] stages) {
        int[] answer = new int[N];

        HashMap<Integer, Double> map = new HashMap<>(); // 스테이지 번호, 실패율

        int users = stages.length; // 총 참여 인원
        double rate = 0; // 실패율

        for(int i = 1; i <= N; i++){

            int count = 0; // 실패자 카운트

            for(int j = 0; j < stages.length; j++){

                // ex) 1번 스테이지(N) 다 돌며 1번 실패자 찾기.
                if(i == stages[j]){
                    count++;
                }
            }

            if(users == 0) {
                rate = 0;
            } else {
                rate = (double) count / users;
            }

            map.put(i, rate);

            users = users - count;
        }

        // 실패율 정렬(내림차)
        List<Map.Entry<Integer, Double>> list =
                new ArrayList<>(map.entrySet());

        list.sort(Map.Entry.<Integer, Double>comparingByValue().reversed());

        for(int i = 0; i < N; i++){
            answer[i] = list.get(i).getKey();
        }

        return answer;
    }
}
  • 문제 핵심:
  • HashMap을 이용해 stage 마다 실패율 저장.
  • 현재 스테이지에 머물러 있는 사람 수(count)를 이용해 실패율 계산.
  • 스테이지를 순회하면서 이전 스테이지 실패 인원을 제외하기 위해 users -= count 처리.
  • Map.Entry와 comparingByValue()를 사용하여 실패율 기준 내림차순 정렬.

📌 정렬 핵심 (Map.Entry)

HashMap = 저장용
List<Entry> = 정렬용 변환 구조
Comparator = 정렬 기준
-------------------------------------------------------------------------comparingByValue()
- value 기준 정렬
- 기본은 오름차순
✔ reversed()
- 정렬 방향 반전 → 내림차순
- list.sort(Map.Entry.<Integer, Double>comparingByValue().reversed());
	☞ 실패율 높은 순으로 정렬

+추가 정리
✔ comparingByKey()
key 기준 정렬 가능
스테이지 번호 기준 정렬할 때 사용

📌 느낀 점

처음에는 문제 설명이 직관적으로 와닿지 않아 혼란이 있었지만,
“현재 스테이지 = 아직 클리어하지 못한 위치”라는 구조를 이해한 뒤 풀이 방향이 명확해졌다.

profile
내가 공부하기 위해

0개의 댓글