🖇️ 문제 링크
📝 문제 분석
일단 각 스테이지에 도달했으나 아직 클리어하지 못한 플레이어의 배열을 만듭니다.
player[stages[i]]++
형태로 만들고, 스테이지에 도달한 플레이어 수 배열은
clear[i] = clear[i] + clear[i + 1] + clear[i + 2] ... clear[N]
연산으로 구해줍니다.
⌨️ 코드
import java.util.*;
class Solution {
public int[] solution(int N, int[] stages) {
int[] player = new int[N + 2];
int[] clear = new int[N + 2];
for(int s : stages)
player[s]++;
clear[N + 1] = player[N + 1];
for(int i = N; i >= 1; i--)
clear[i] = player[i] + clear[i + 1];
List<Stage> list = new ArrayList<>();
for(int i = 1; i <= N; i++) {
if(clear[i] == 0)
list.add(new Stage(0, i));
else
list.add(new Stage((double)player[i] / clear[i], i));
}
int[] answer = list.stream()
.sorted((s1, s2) -> {
if (s1.fail == s2.fail) return s1.idx - s2.idx;
return -Double.compare(s1.fail, s2.fail);
})
.mapToInt(s -> s.idx)
.toArray();
return answer;
}
static class Stage {
double fail;
int idx;
Stage(double fail, int idx) {
this.fail = fail;
this.idx = idx;
}
}
}
Uploaded by Notion2Tistory v1.1.0