💡풀이
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();
단계별 동작
map.entrySet().stream()
- Map을 Entry(Key-Value 쌍) Stream으로 변환
.sorted(Map.Entry.comparingByValue(Comparator.reverseOrder()))
- Value 기준으로 내림차순 정렬
comparingByValue()
: Value를 비교reverseOrder()
: 내림차순 정렬 (큰 값 → 작은 값)
.mapToInt(Map.Entry::getKey)
- 정렬된 Entry에서 Key만 추출하여 IntStream으로 변환
.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 |