나의 코드
function solution(N, stages) {
const 스테이지진행상황 = stages.reduce((acc, cur) => {
acc[cur] = (acc[cur] || 0 )+ 1;
return acc
},{})
let box = {}
let 스테이지클리어못한수
for(i=1; i<N + 1; i++){
스테이지클리어못한수 = 스테이지진행상황[i]
let 실패율 = 스테이지클리어못한수 / stages.length
box[i] = 실패율 ? 실패율 : 0
stages = stages.filter( x=> x != i)
}
let sortable = [];
for (var name in box) {
sortable.push([name, box[name]]);
}
sortable.sort(function(a, b) {
return b[1] - a[1];
});
let answer = sortable.map(x => Number(x[0]))
return answer;
}
제일 먼저 객체로 변환해서 스테이지마다 몇번을 실패했는지 구분해주었다
그런뒤 for문을 통해서 실패율을 계산해서 box객체에다가 각 스테이지 별로 실패율을 계산해서 넣어주었고
기 객체를 다시 배열로 변환하여 정렬을 해주었다.
객체상태에서 정렬할려고 했는데 잘 안되어서 이렇게 했다.
이 부분은 다시 공부해줘야 한다.
조금 더 간결하게
function solution(N, stages) {
const 스테이지진행상황 = stages.reduce((acc, cur) => {
acc[cur] = (acc[cur] || 0 )+ 1;
return acc
},{})
let box = {}
let 스테이지클리어못한수
for(i=1; i<N + 1; i++){
스테이지클리어못한수 = 스테이지진행상황[i]
let 실패율 = 스테이지클리어못한수 / stages.length
box[i] = 실패율 ? 실패율 : 0
stages = stages.filter( x=> x != i)
}
const result = Object.entries(box).sort(([, a], [, b]) => b - a);
return result.map(x=>Number(x[0]));
}
sort(( [, a], [, b]) => b - a) 이 부분은 sort((a,b) => b[1] - a[1]); 로 변경해도 된다.
다른 사람 코드
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]);
}
이중 for문을 해서
아예 처음 부터 실패율을 구했다.
그런뒤 배열의 두 번째 있는 요소를 내림차순으로 정렬을 해줬다.
그런뒤 stage만 출력 하면서 정답이 도출 되었다.
가독성도 좋고 코드가 바로바로 이해되어서 정말 잘 쓴 코드라 생각이 된다.
'알고리즘 > 프로그래머스 - JS' 카테고리의 다른 글
[프로그래머스-JS] level.1 3진법 뒤집기 (0) | 2022.07.15 |
---|---|
[프로그래머스-JS] level.1 약수의 개수와 덧셈 (0) | 2022.07.14 |
[프로그래머스-JS] level.1 폰켓몬 (0) | 2022.07.04 |
[프로그래머스-JS] level.1 k번째수 <정렬> (0) | 2022.06.30 |
[프로그래머스-JS] level.1 완주하지 못한 선수 (0) | 2022.06.28 |