입출력
게임을 이용하는 사용자가 멈춰있는 스테이지 번호가 담긴 stages
와
전체스테이지의 개수 N
를 입력값으로 받는다
구해야 하는 값
실패율 = 클리어하지 못한 플레이어 수 / 스테이트 도달한 플레이어 수
을 구하여
실패율이 높은 스테이지
부터 <내림차순>
으로 스테이지 번호
가 담겨있는 배열을 return 해야한다
function solution(N, stages) {
let result = [];
for(let i = 1 ; i<=N; i++){
let pass = passUser(i,stages)
let challenge = challengeUser(i,stages)
result.push([i,challenge/pass]) // index와 함께 실패율을 result배열에 저장한다
}
result.sort((a,b) => { //sort를 사용하여 내림차순 정렬을 해준다
if(a[1] < b[1]) return 1
if(a[1] > b[1]) return -1
if(a[1] === b[1]){
if(a[0] < b[0]) return -1
if(a[0] > b[0]) return 1
}
})
return result.map(el => el[0])
}
function passUser(num, stages){ // 스테이지를 통과 한 유저의 수
return stages.filter(el => el >= num).length
}
function challengeUser (num, stages){ // 스테이지에 도전중인 유저의 수
return stages.filter(el => el === num).length
}
sort는 결과 값에 따라 정렬이 이루어지는데
-1
오름차순 ,1
내림차순 으로 정렬된다
내부에서 if로 분기를 나누어주어서 각index
값으로도 비교하여 정렬 해줄 수 있다
다른분의 풀이중에서 같은 로직인데 조금 더 간결하게 작성하신분이 계셔서 참고하여 코드를 수정하였다
불필요한 함수를 생성했던 코드를 지우고 바로 filter로 값을 구해 주었다
sort 하면서 내부에서 if로 분기를 나누어 주었는데 굳이 나누어주지 않고
첫번째값으로 내림차순정렬을 해주었다
입출력예시에 아래와 같이 실패율이 동일 할 경우에는 stage값이 오름차순 정렬이 되어있다
만약 아래와 같이 실패율의 값이 같다면
stage값은 오름차순으로 정렬되기 때문에 실패율만 비교해 주면 되었다
function solution(N, stages) {
let result = [];
for(let i = 1 ; i<=N; i++){
let passUser = stages.filter(el => el >= i).length // 스테이지를 통과 한 유저의 수
let challengeUser = stages.filter(el => el === i).length // 스테이지에 도전중인 유저의 수
result.push([i,challengeUser/passUser]) // index와 함께 실패율을 result배열에 저장한다
}
result.sort((a,b) => b[1] - a[1]);
return result.map(el => el[0])
}