처음에는 객체를 생성해서 풀어나갔는데 마지막 내림차순부분에서 객체의 값을 비교하는것이
하자면 할 수 있겠지만 난잡해져서 배열로 다시 풀었다
코드
function solution(N, stages) {
let result = [];
let failLateArr = new Array(N).fill(0);
let peopleLen = stages.length;
stages = stages.sort();
// 실패율 들어간 배열 만들기
for (let i = 0; i < N; i++) {
let count = 0;
for (let j = 0; j < stages.length; j++) {
if (stages[j] === i + 1) count++;
}
failLateArr[i] = peopleLen !== 0 ? count / peopleLen : 0;
peopleLen -= count;
}
console.log(failLateArr);
// 내림차순하기
for (let i = 0; i < N; i++) {
let min = -1;
let index = -1;
for (let j = 0; j < failLateArr.length; j++) {
if (failLateArr[j] > min) {
min = failLateArr[j];
index = j;
}
}
result.push(index + 1);
failLateArr[index] = -1;
}
return result;
}
위 코드를 보면 알겠지만 몇몇 케이스가 통과가 되질 안았는데
그 이유는 분모를 남은 사람으로 나눴을 때 남은 사람이 0명인 경우 NaN이 나왔기 때문이다
그렇기 때문에 조건을 달아줬다
다른 사람의 더 좋은 코드
function solution(N, stages) {
let result = [];
for(let i=1; i<=N; i++){
let reach = stages.filter((x) => x >= i).length;
let curr = stages.filter((x) => x === i).length;
result.push([i, curr/reach]);
}
result.sort((a,b) => b[1] - a[1]);
return result.map((x) => x[0]);
}
진짜 이 코드에서 많이 배워간다
나는 처음에 객체로 각 스테이지별 실패율을 구했는데
이것을 깔끔하게 내림차순할 방법을 못찾아서 배열로 했는데...
이 코드에서 배운점
1. reach와 curr을 filter로 깔끔하게 함
특히, reach를 나 처럼 남은 사람으로 둬서 NaN을 만들 가능성을 안두고 현 스테이지 이상의값만을 카운팅함
2. 배열을 객체처럼 씀 [ [1, 0,125], [2, 0.42] ] 처럼 2차원 배열로 만들되 안쪽 배열에서 0 부분에 스테이지 1 부분에 실패율을 넣었음 그래서 sort를 1번째 인덱스를 참조해서 함
'코딩 테스트 > 프로그래머스 level1' 카테고리의 다른 글
수박수박수박수박수박수? (0) | 2022.09.05 |
---|---|
키패드 누르기 (0) | 2022.08.11 |
완주하지 못한 선수 (0) | 2022.08.08 |
소수 만들기 (0) | 2022.08.06 |
음양 더하기 (0) | 2022.08.06 |