-
프로그래머스 - Lv1. 실패율PS 2022. 2. 25. 14:36
문제 : 실패율
- 문제 링크는 여기.
- 쉽게 말해, 1 ~ N라운드까지의 라운드별 실패율(=도달한 사람/(도달한 사람 + 통과한 사람))을 구해서 내림차순 정렬하고 배열로 반환해라.
풀이
import java.util.ArrayList; import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; class Solution { public int[] solution(int N, int[] stages) { HashMap<Integer, Integer> stagesMap = new HashMap<Integer, Integer>(); // 라운드별 진행유저 수 for (int roundUserCount : stages) { int putValue = (stagesMap.get(roundUserCount) == null) ? 1 : (stagesMap.get(roundUserCount) + 1); stagesMap.put(roundUserCount, putValue); } HashMap<Integer, Float> resultMap = new HashMap<Integer, Float>(); // 라운드별 실패율 int preRoundUsers = 0; int totalUsers = stages.length; float failRate = 0F; for (int i = 1; i <= N; i += 1) { totalUsers -= preRoundUsers; if (totalUsers == 0) { resultMap.put(i, 0F); } else { int nowUser = stagesMap.get(i) == null ? 0 : stagesMap.get(i); failRate = (float)nowUser / totalUsers; resultMap.put(i, failRate); preRoundUsers = nowUser; } } // 맵에 저장된 라운드별 실패율을 정렬하여 List에 엔트리로 담음. // List<Map.Entry<Integer, Float>> entries = resultMap.entrySet().stream().sorted(Map.Entry.comparingByValue(Comparator.reverseOrder())).collect(Collectors.toList()); List<Map.Entry<Integer, Float>> entries = new ArrayList(resultMap.entrySet()); entries.sort(Map.Entry.comparingByValue(Comparator.reverseOrder())); int[] answer = new int[entries.size()]; int i = 0; for (Map.Entry<Integer, Float> e : entries) { answer[i] = e.getKey(); i += 1; } return answer; } }
- 구현 아이디어 자체는 어려울 게 없다, 문제가 원하는 대로 구해주는게 전부.
후기
1 ) 아이디어는 쉬웠는데 Map을 sorting하는 법을 몰라서 헤맸다. 구글링 해보니까 죄다 stream을 쓰라고 하는데, 뭔지도 모르는 걸 갖다가 해결만 하긴 싫어서...
Comparator
에 대해 공부가 필요하다고 느꼈다. 자바 허접. (쭈굴...)
2 ) 다른 문제(문자열 압축)에서도 그런데, 오류를 발생시키는 엣지케이스를 고려하는게 좀 낯설다. 덜렁이라서 그런것 같다. 이 문제에서는totalUsers == 0
인 경우(아무도 라운드에 도달하지 못했을 경우)를 생각하지 못해서 수차례 에러를 냈다.'PS' 카테고리의 다른 글
프로그래머스 - Lv1. 2016년 (0) 2022.03.02 프로그래머스 - Lv1. 예산 (0) 2022.03.01 프로그래머스 - Lv1. 신고 결과 받기 (0) 2022.02.28 프로그래머스 - Lv1. 3진수 뒤집기 (0) 2022.02.27 프로그래머스 - Lv1. 약수의 개수와 덧셈 (0) 2022.02.26 프로그래머스 - Lv1. 폰켓몬 (0) 2022.02.24