- 난이도: Lv1
- 시간 제한: 1초
- 메모리 제한: 128MB
프로그래머스 링크: https://school.programmers.co.kr/learn/courses/30/lessons/42889
풀이 링크(GitHub): hayannn/CodingTest_Java/프로그래머스/1/42889. 실패율
실제 풀이 시간 : 23분
0. Comparable로 Game 클래스 - stage, fail 변수 작성하기
1. 배열 선언 및 스테이지 변수 선언하기
2. 실패율 계산하기
스테이지 도달했으나 클리어 못한 플레이어 수 / 스테이지 도달한 플레이어 수
3. 스테이지 return : 실패율이 높은 사용자부터 내림차순 정렬
import java.util.*;
class Game implements Comparable<Game> {
private int stage;
private int fail;
public Game(int stage, int fail) {
this.stage = stage;
this.fail = fail;
}
public int getStage() {
return this.stage;
}
@Override
public int compareTo(Game other) {
if (this.fail == other.fail) {
return Integer.compare(this.stage, other.stage);
}
return Integer.compare(other.fail, this.fail);
}
}
class Solution {
public int[] solution(int N, int[] stages) {
int[] answer = new int[N];
ArrayList<Game> Game = new ArrayList<>();
int player = 0;
for(int i=0; i<N; i++){
int fail = player / stages.length;
Game.add(new Game(i, fail));
}
Collections.sort(Game);
for(int i=0; i<N; i++){
answer[i] = Game.get(i).getStage();
}
return answer;
}
}
//before
int player = 0;
for(int i=0; i<N; i++){
int fail = player / stages.length;
Game.add(new Game(i, fail));
}
//after
for(int i=1; i<=N; i++){
int player = 0;
for(int j=0; j<stages.length; j++){
if(stages[j] == i){
player++;
}
}
double fail = 0;
if(stages.length >= 1){
fail = (double) player / stages.length;
}
GameList.add(new Game(i, fail));
stages.length -= player;
}
stages.length -= player
에서 오류 발생int stageLength = stages.length;
를 반복문 내부에 선언하면 각 반복마다 배열의 길이가 변경되는 문제로 인해 테스트가 모두 통과하지 못함....
int stageLength = stages.length;
...
//실패율 계산하기
double fail = 0;
//int stageLength = stages.length;
if(stageLength >= 1){
fail = (double) player / stageLength;
}
GameList.add(new Game(i, fail));
stageLength -= player;
}
Collections.sort(GameList);
for(int i=0; i<N; i++){
answer[i] = GameList.get(i).getStage();
}
return answer;
}
}
스테이지 도달했으나 클리어 못한 플레이어 수 / 스테이지 도달한 플레이어 수
import java.util.*;
class Game implements Comparable<Game> {
private int stage;
private double fail;
public Game(int stage, double fail) {
this.stage = stage;
this.fail = fail;
}
public int getStage() {
return this.stage;
}
@Override
public int compareTo(Game other) {
if (this.fail == other.fail) {
return Integer.compare(this.stage, other.stage);
}
return Double.compare(other.fail, this.fail);
}
}
class Solution {
public int[] solution(int N, int[] stages) {
int[] answer = new int[N];
ArrayList<Game> GameList = new ArrayList<>();
int stageLength = stages.length;
for(int i=1; i<=N; i++){
int player = 0; //스테이지 안의 플레이어 수
for(int j=0; j<stages.length; j++){
if(stages[j] == i){ //스테이지가 계속되는 동안
player++;
}
}
//실패율 계산하기
double fail = 0;
if(stageLength >= 1){
fail = (double) player / stageLength;
}
GameList.add(new Game(i, fail));
stageLength -= player;
}
Collections.sort(GameList);
for(int i=0; i<N; i++){
answer[i] = GameList.get(i).getStage();
}
return answer;
}
}