-
프로그래머스 : 실패율코딩테스트 문제 풀이/프로그래머스 2023. 11. 23. 00:09
프로그래머스 다른 사람 풀이 첫번째
다른 사람 풀이 _import java.util.ArrayList; import java.util.Collections; import java.util.List; class Solution { public int[] solution(int N, int[] lastStages) { int nPlayers = lastStages.length; int[] nStagePlayers = new int[N + 2]; for (int stage : lastStages) { nStagePlayers[stage] += 1; } int remainingPlayers = nPlayers; List<Stage> stages = new ArrayList<>(); for (int id = 1 ; id <= N; id++) { double failure = (double) nStagePlayers[id] / remainingPlayers; remainingPlayers -= nStagePlayers[id]; Stage s = new Stage(id, failure); stages.add(s); } Collections.sort(stages, Collections.reverseOrder()); int[] answer = new int[N]; for (int i = 0; i < N; i++) { answer[i] = stages.get(i).id; } return answer; } class Stage implements Comparable<Stage> { public int id; public double failure; public Stage(int id_, double failure_) { id = id_; failure = failure_; } @Override public int compareTo(Stage o) { if (failure < o.failure ) { return -1; } if (failure > o.failure ) { return 1; } return 0; } } }
클래스를 활용하여 풀이한 코드이다. 내일 분석해봐야지..!! 🤓
내 코드
import java.util.Arrays; class Solution { public int[] solution(int N, int[] stages) { int[] answer = new int[N]; float[] arrFailPercent = new float[N + 1]; float totUserCnt = stages.length; // 실패율 계산 1 _ 스테이지별 유저 몇명인지 셈 for (int i = 0; i < totUserCnt; i++) { if (stages[i] == N + 1) continue; arrFailPercent[stages[i]]++; } // 실패율 계산 2 _ 스테이지별 실패율 계산 for (int i = 1; i < arrFailPercent.length; i++) { float nowStageUsers = arrFailPercent[i]; if (totUserCnt <= 0) arrFailPercent[i] = 0; else arrFailPercent[i] /= totUserCnt; totUserCnt -= nowStageUsers; } // 실패율 높은 순 출력 float[] arrOrder = arrFailPercent.clone(); Arrays.sort(arrOrder); int idx = 0; for (int i = arrOrder.length - 1; i >= 1; i--) { for (int j = 1; j < arrFailPercent.length; j++) { if (arrOrder[i] == arrFailPercent[j]) { answer[idx++] = j; arrFailPercent[j] = -1; break; } } } return answer; } }
소요 시간 : 32분 12초
30분을 초과했다 ㅠㅠ 이번 문제는 조금 어려웠음.. 테스트 케이스 몇가지를 예상하지 못해서 30분 됐다고 알림 울렸을때 질문하기를 참조해서 알아낸 테스트 케이스로 해결한 문제이다.
내가 놓친 부분은 0 이하의 수로 나눗셈을 하려고 할 때 Nan이 배열에 들어가는 것을 생각하지 못한 거였다. 😔
'코딩테스트 문제 풀이 > 프로그래머스' 카테고리의 다른 글
프로그래머스: 문자열 내 마음대로 정렬하기 (0) 2023.11.23 프로그래머스 : 정수 내림차순으로 배치하기 (0) 2023.11.23 프로그래머스: 서울에서 김서방 찾기 (0) 2023.11.23 프로그래머스: 소수만들기 (0) 2023.11.23 프로그래머스 : 부족한 금액 계산하기 (0) 2023.11.22