1. 문제
https://programmers.co.kr/learn/courses/30/lessons/42889
코딩테스트 연습 - 실패율
실패율 슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프랜즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다. 원인은 신규 사용자와 기존 사용자 사이에 스
programmers.co.kr
2. 나의 풀이
import java.util.*;
class Solution {
public List<Integer> solution(int N, int[] stages) {
double [] silfaeyul = new double [N];
for(int i = 1; i <= N; i = i + 1) {
double dodal = 0;
double bulhab = 0;
for(int j = 0; j < stages.length; j = j + 1) {
if(stages[j] >= i) {
dodal += 1;
}
if(stages[j] == i) {
bulhab += 1;
}
}
if(bulhab == 0) {
silfaeyul[i-1] = 0;
}else {
silfaeyul[i-1] = bulhab / dodal;
}
}
Map<Integer, Double> imsi = new HashMap<Integer, Double>();
for(int i = 0; i < silfaeyul.length; i = i + 1) {
imsi.put(i + 1, silfaeyul[i]);
}
List<Integer> keySetList = new ArrayList<>(imsi.keySet());
// 내림차순 정렬
Collections.sort(keySetList, (o1, o2) -> (imsi.get(o2).compareTo(imsi.get(o1))));
return keySetList;
}
}
3. 다른 사람 풀이
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;
}
}
}
'알고리즘 공부 > 프로그래머스' 카테고리의 다른 글
(Java)프로그래머스 코딩테스트 연습 - 스택/큐 - 프린터 (0) | 2020.11.13 |
---|---|
(Java)프로그래머스 코딩테스트 연습 - 스택/큐 - 다리를 지나는 트럭 (0) | 2020.11.12 |
(Java)프로그래머스 코딩테스트 연습 - 연습문제 - 하샤드 수 (0) | 2020.11.10 |
(Java)프로그래머스 코딩테스트 연습 - 월간 코드 챌린지 시즌1 - 3진법 뒤집기 (0) | 2020.11.10 |
(Java)프로그래머스 코딩테스트 연습 - 월간 코드 챌린지 시즌1 - 내적 (0) | 2020.11.10 |