굉장히 단순한 문제였는데 stage순서로 정렬을 하고 stage배열 안에 들어가있는 개수가 그 stage에 도달한 사람이고 배열안에 있는 숫자가 도달했으나 클리어하지 못한 사람이다.
참조한 배열의 요소를 하나씩 지워가며 실패율을 계산하고 그것을 다시 정렬해주면 끝나는 문제다.
계속 여러가지가 컴파일에러가 발생했는데.. 그것은 그 스테이지에 도달한 사람이 없을 경우 0으로 처리하는 예외처리를 해주지 않아서 발생한 문제였다..
import java.io.*;
import java.util.*;
import java.util.Collections;
class stage{
int stage;
float failer;
stage(int a, float b){
this.stage = a;
this.failer = b;
}
}
class Solution {
public int[] solution(int N, int[] stages) {
int[] answer = new int[N];
ArrayList<stage> st = new ArrayList<>();
Deque<Integer> stageslist = new ArrayDeque<Integer>();
Arrays.sort(stages);
ArrayList<Integer> answerList = new ArrayList<>();
for(int item :stages){
stageslist.add(item);
}
for(int i=1;i<N+1;i++){
int arrive=stageslist.size();
int nonclear=0;
for(int item:stageslist){
if(item==i){
nonclear++;
stageslist.removeFirst();
}
}
if(arrive==0){
st.add(new stage(i,0));
continue;
}
float failer = (float) nonclear/arrive;
st.add(new stage(i,failer));
}
Collections.sort(st, new Comparator<stage>() {
@Override
public int compare(stage o1, stage o2) {
if(o1.failer>o2.failer){
return -1;
}else if(o1.failer==o2.failer){
return 0;
}else{
return 1;
}
}
});
for(int i=0;i<N;i++){
answer[i]=st.get(i).stage;
}
return answer;
}
}
https://programmers.co.kr/learn/courses/30/lessons/42889
'문제풀이' 카테고리의 다른 글
백준 11060번 점프점프 JAVA (0) | 2020.09.21 |
---|---|
백준 18352번 특정 거리의 도시 찾기 JAVA (0) | 2020.09.17 |
백준 18310번 안테나 JAVA (0) | 2020.09.16 |
백준 16234번 인구이동(JAVA) (0) | 2020.09.11 |
카카오 기출 무지의 먹방 라이브 (0) | 2020.09.09 |