코딩 테스트 풀이 체크리스트 |
|
2시간 내에 풀었는가? | O |
본인의 실력으로 풀었는가? | O |
코딩테스트 연습 - 실패율
실패율 슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프랜즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다. 원인은 신규 사용자와 기존 사용자 사이에 스
programmers.co.kr
import java.util.*;
class Solution {
public int[] solution(int N, int[] stages) {
int[] answer = new int[N];
int[] arrival = new int[N+1]; //스테이지별 도달한 플레이어 수
int[] noClear = new int[N+1]; //스테이지별 클리어하지 못한 플레이어 수
//도달한 플레이어 수 구하기
//stages[j](멈춰있는 스테이지)가 i(스테이지 레벨)보다 크거나 같으면 +1
for (int i = 1; i <= N; i++) {
for (int j = 0; j < stages.length; j++) {
if (stages[j] >= i) arrival[i]++;
}
}
//도달은 했지만 클리어하지 못한 플레이어 수 구하기
//stages[i]의 해당 스테이지 +1
for (int i = 0; i < stages.length; i++) {
if (stages[i] > N) continue;
noClear[stages[i]]++;
}
//해시맵에 스테이지와 해당 스테이지의 실패율 저장
HashMap<Integer, Double> map = new HashMap<>();
for (int i = 1; i <= N; i++) {
if (arrival[i] == 0)
map.put(i, (double) 0);
else
map.put(i, (double) noClear[i] / arrival[i]);
}
//실패율(내림차순)로 정렬
//실패율이 동일하면 스테이지 레벨이 작은 것이 앞으로 오게(오름차순) 정렬
List<Map.Entry<Integer, Double>> arr = new ArrayList<Map.Entry<Integer, Double>>(map.entrySet());
Collections.sort(arr, new Comparator<Map.Entry<Integer, Double>>(){
@Override
public int compare(Map.Entry<Integer, Double> o1, Map.Entry<Integer, Double> o2) {
double v1 = o1.getValue();
double v2 = o2.getValue();
if (v1 < v2) {
return 1;
} else if (v1 == v2) {
if (o1.getKey() > o2.getKey()) {
return 1;
}
}
return -1;
}
});
for (int i = 0; i < arr.size(); i++) {
answer[i] = arr.get(i).getKey();
}
return answer;
}
}
테스트 1 〉 | 통과 (0.50ms, 73.7MB) |
테스트 2 〉 | 통과 (0.68ms, 80.5MB) |
테스트 3 〉 | 통과 (23.97ms, 93.4MB) |
테스트 4 〉 | 통과 (84.02ms, 92.1MB) |
테스트 5 〉 | 통과 (323.87ms, 86.4MB) |
테스트 6 〉 | 통과 (4.55ms, 82.7MB) |
테스트 7 〉 | 통과 (9.45ms, 88.4MB) |
테스트 8 〉 | 통과 (102.62ms, 87.6MB) |
테스트 9 〉 | 통과 (295.23ms, 88.3MB) |
테스트 10 〉 | 통과 (47.49ms, 81.1MB) |
테스트 11 〉 | 통과 (98.49ms, 94.1MB) |
테스트 12 〉 | 통과 (47.03ms, 84.7MB) |
테스트 13 〉 | 통과 (86.05ms, 100MB) |
테스트 14 〉 | 통과 (0.49ms, 70.3MB) |
테스트 15 〉 | 통과 (20.82ms, 78.3MB) |
테스트 16 〉 | 통과 (8.20ms, 85.4MB) |
테스트 17 〉 | 통과 (12.28ms, 79.9MB) |
테스트 18 〉 | 통과 (5.29ms, 74.5MB) |
테스트 19 〉 | 통과 (2.36ms, 77.1MB) |
테스트 20 〉 | 통과 (10.64ms, 74.1MB) |
테스트 21 〉 | 통과 (8.66ms, 89.8MB) |
테스트 22 〉 | 통과 (147.99ms, 111MB) |
테스트 23 〉 | 통과 (17.61ms, 92.1MB) |
테스트 24 〉 | 통과 (18.99ms, 92.1MB) |
테스트 25 〉 | 통과 (0.52ms, 78.9MB) |
테스트 26 〉 | 통과 (0.50ms, 77.6MB) |
테스트 27 〉 | 통과 (0.49ms, 79.9MB) |
이게 1단계..?
문제를 풀면서 주의해야할 점은 도달한 플레이어 수가 0인 스테이지는 실패율을 0으로 제대로 처리해야 한다
직접 값을 입력하지 않으면 0으로 나누는 것이 되기 때문에 오류가 뜨기 때문이다.
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[Java] 프로그래머스 - 거리두기 확인하기 (2단계) (0) | 2022.04.29 |
---|---|
[Java] 프로그래머스 - 1차 뉴스 클러스터링 (2단계) (0) | 2022.04.29 |
[Java] 프로그래머스 - 괄호 변환 (2단계) (0) | 2022.04.28 |
[Java] 프로그래머스 - 메뉴 리뉴얼 (2단계) (0) | 2022.04.27 |
[Java] 프로그래머스 - 행렬 테두리 회전하기 (2단계) (0) | 2022.04.27 |