[프로그래머스, Java] 실패율

2025. 7. 18. 19:22·CodingTest/Programmers

사진을 클릭하면 해당 문제로 이동

💡풀이

import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;

class Solution {
    public int[] solution(int N, int[] stages) {
        Map<Integer, Double> clears = new HashMap<>(); // 각 스테이지에 도달한 사람 수
        Map<Integer, Double> fails = new HashMap<>();  // 각 스테이지에서 실패한 사람 수

        // 도달자 수와 실패자 수 계산
        for (int stage : stages) {
            fails.put(stage, fails.getOrDefault(stage, 0.0) + 1); // 해당 스테이지에서 실패
            for (int i = 1; i <= stage; i++) {
                clears.put(i, clears.getOrDefault(i, 0.0) + 1);   // 1~stage까지 도달
            }
        }

        Map<Integer, Double> map = new HashMap<>(); // 실패율 저장

        // 각 스테이지별 실패율 계산
        for (int i = 1; i <= N; i++) {
            if (fails.getOrDefault(i, 0.0) == 0.0 || clears.getOrDefault(i, 0.0) == 0.0) {
                map.put(i, 0.0); // 실패자가 없거나 도달자가 없으면 실패율 0
            } else {
                map.put(i, fails.get(i) / clears.get(i)); // 실패율 = 실패자수/도달자수
            }
        }

        // 실패율 내림차순으로 정렬하여 스테이지 번호 배열로 반환
        return map.entrySet().stream()
                .sorted(Map.Entry.comparingByValue(Comparator.reverseOrder()))
                .mapToInt(Map.Entry::getKey)
                .toArray();
    }
}

📖새로 배운 부분

Stream을 활용하여 Map 정렬해보기

return map.entrySet().stream()
        .sorted(Map.Entry.comparingByValue(Comparator.reverseOrder()))
        .mapToInt(Map.Entry::getKey)
        .toArray();

단계별 동작

  1. map.entrySet().stream()
    • Map을 Entry(Key-Value 쌍) Stream으로 변환
  2. .sorted(Map.Entry.comparingByValue(Comparator.reverseOrder()))
    • Value 기준으로 내림차순 정렬
    • comparingByValue(): Value를 비교
    • reverseOrder(): 내림차순 정렬 (큰 값 → 작은 값)
  3. .mapToInt(Map.Entry::getKey)
    • 정렬된 Entry에서 Key만 추출하여 IntStream으로 변환
  4. .toArray()
    • IntStream을 int[] 배열로 변환

결과

맵: {1=0.5, 2=0.8, 3=0.2}
정렬 후: 2번(0.8) → 1번(0.5) → 3번(0.2)
결과: [2, 1, 3]

 

GitHub - okjunghyeon/Programmers_CodingTest: 프로그래머스 관련 코딩테스트 문제를 풀이한 저장소입니다.

프로그래머스 관련 코딩테스트 문제를 풀이한 저장소입니다. Contribute to okjunghyeon/Programmers_CodingTest development by creating an account on GitHub.

github.com

 

'CodingTest > Programmers' 카테고리의 다른 글

[프로그래머스, Java][1차] 다트 게임  (0) 2025.07.18
[프로그래머스, Java][PCCE 기출문제] 9번 / 지폐 접기  (0) 2025.07.18
[프로그래머스, Java] 옹알이 (2)  (0) 2025.07.18
[프로그래머스, Java] 소수 만들기  (0) 2025.07.18
[프로그래머스, Java] 소수 찾기  (0) 2025.07.18
'CodingTest/Programmers' 카테고리의 다른 글
  • [프로그래머스, Java][1차] 다트 게임
  • [프로그래머스, Java][PCCE 기출문제] 9번 / 지폐 접기
  • [프로그래머스, Java] 옹알이 (2)
  • [프로그래머스, Java] 소수 만들기
devoks
devoks
꾸준히 작성해보자!
  • devoks
    ok's 개발 블로그
    devoks
  • 전체
    오늘
    어제
    • 분류 전체보기 (110) N
      • Backend (15)
        • SpringBoot (0)
        • Java (15)
      • Cs (17) N
      • Infra (0)
        • AWS (0)
        • Docker (0)
      • CodingTest (78)
        • Programmers (78)
  • 링크

    • My GitHub
  • 인기 글

  • 태그

    CS
    java
    effectivejava
    json
    BufferedWriter
    switch
    StringTokenizer
    programmers
    codingtest
    BufferedReader
  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
devoks
[프로그래머스, Java] 실패율
상단으로

티스토리툴바