이번에 풀어본 문제는
프로그래머스 실패율 입니다.
import java.util.*;
class Stage
{
int cnt,stay,idx;
double val;
public Stage(int cnt,int stay)
{
this.cnt = cnt;
this.stay = stay;
}
public Stage(int idx,double val)
{
this.idx = idx;
this.val = val;
}
public void addCnt()
{
this.cnt++;
}
public void addStay()
{
this.stay++;
}
}
class Solution {
public int[] solution(int N, int[] stages) {
int[] answer;
ArrayList<Stage> al = new ArrayList<>();
for(int i = 0; i <= N+1; ++i) al.add(new Stage(0,0));
for(int stage : stages) // 2, 1, 2, 6, 2, 4, 3, 3
{
if(stage <= N) al.get(stage).addStay();
while(stage-- > 0) al.get(stage+1).addCnt();
}
ArrayList<Stage> answerAl = new ArrayList<>();
answerAl.add(new Stage(Integer.MAX_VALUE,Integer.MIN_VALUE));
for(int i = 1; i < al.size(); ++i)
{
double stay = al.get(i).stay, cnt = al.get(i).cnt;
if(stay == 0 || cnt == 0)
{
if(i > N) continue;
answerAl.add(new Stage(i,0.0));
}
else
{
answerAl.add(new Stage(i,stay/cnt));
}
}
Collections.sort(answerAl,new Comparator<Stage>()
{
@Override
public int compare(Stage o1, Stage o2)
{
if(o1.val == o2.val)
{
return o1.cnt - o2.cnt;
}
return o2.val > o1.val ? 1: -1;
}
});
answer = new int[N];
for(int i = 0; i < N; ++i)
{
answer[i] = answerAl.get(i).idx;
}
return answer;
}
}
실패율을 기준으로 내림차순 정렬하는 문제입니다.
각 스테이지 번호를 인덱스로 갖는 ArrayList를 만들어 도전한 인원 수, 머물러있는 인원 수를 카운트합니다.
카운트값 정리를 마쳤으면 주어진 계산식을 통해 계산하고, 그 결과물을 기준으로 내림차순으로 정렬하고 인덱스를 같이 담아주면 되는 간단한 문제입니다.
다음주 코딩테스트를 위해 기출문제를 열심히 풀고있어요!
레벨1로 힐링했으니 다음은 어려운문제 풀어보겠습니다ㅠㅋㅋㅋㅋ