- sort()로 정렬하기
- map()사용해서 원하는 배열 리턴하기
- filter()
- splice()
function solution(N, stages) {
var answer = [];
stages.sort(function(a,b) { return a-b})
for (var i = 1; i <= N; i++) {
// 1을 찾아서
icount = stages.filter(state => state === i);
// 실패율
fail = (icount.length/stages.length);
answer.push([i, fail])
// 들어갔던건 빼줌
stages.splice(0, icount.length)
// 내림차순 정렬(실패율에 따라)
answer.sort(function(a, b) { return b[1]-a[1]} )
}
//answer 2차원 배열에서 0번째만
return answer.map(arr => arr[0]);
}
result = solution(4, [4,4,4,4,4]);
console.log(result);
더 간단명료하게 적으신 분들도 많지만 이게 내 최선이었다...ㅋ큐ㅠㅠ
다른분들은 문제까지 도달한 사람을 따로 계산을 해서 뽑아냈지만 나는 기존에 있는 배열 원본에서 잘라내는 형식을 사용했다.(원래는 이러면 안되지만)
- stages 배열 오름차순 정렬
- N만큼 for문을 돌리고 i를 찾는다.
- i의 갯수를 기반으로 실패율을 구한다.
- answer에 몇번째인지와 실패율을 같이 push한다.
- 들어갔던 i의 갯수를 stages에서 빼준다.
- answer을 실패율에 따라 내림차순 정렬해준다.
- answer에서 정렬된 i들만 뽑아와준다.
대략 흐름은 이렇게 된다.
4번
answer.push([i, fail])
이게 4번 내용인데, 처음에 실패율 값을 다 구해놓고 이걸어떻게 정렬을 시키며 i들로 다시 어떻게 바꾸나 고민을 되게 많이 했다.
이런식으로 넣으면 나중에 answer에는
[ [1, 1의실패율],[2, 2의실패율], [3, 3의 실패율 ] ... ]
이런식으로 나오게 된다.
이 때 내림차순 정렬은 2차원 배열의 1번째를 기준으로 내림차순 정렬을 해주고 나중에 map하ㅏㅁ수를 이용해서 0번째에 있는 숫자들만 뽑아와주었다.