https://school.programmers.co.kr/learn/courses/30/lessons/42889
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
딱 객체로 하면 좋은 문제인데, 객체를 다루는 방법을 계속 고민하다가 결국 배열로 풀기는 했다. 다만 시간복잡도가 엄청나게 증가해서 3000ms이상 걸리는 테스트케이스가 존재함.
아래는 내가 작성한 답안
function solution(N, stages) {
let points = [];
let stageSort = [];
for(let i = 1; i <= N; i++){
let approach = stages.filter(a=>a>=i).length;
let clear = stages.filter(a=>a>i).length;
if(approach === 0){
points.push(0)
} else{
points.push((approach-clear)/approach)
}
stageSort.push(i);
}
return stageSort.sort((a, b)=>points[b-1]-points[a-1])
}
객체를 어떻게 생성을 하는지 궁금했는데, 모범답안이 있었다.
function solution(N, stages) {
let tempArr = stages;
let answerObj = {};
for ( let i = 1; i <= N; i++ ) {
let top = tempArr.filter(el => el === i).length;
let bottom = tempArr.length;
answerObj[i] = top/bottom;
tempArr = tempArr.filter(el => el !== i);
}
return Object.entries(answerObj).sort((a,b) => b[1] - a[1]).map(v => +v[0])
}
아. 객체는 이렇게 먼저 빈 객체를 선언을 해주고,
오브젝트명[key가 될 index값] = value가 될 계산값
요렇게 하나씩 넣어주고,
Object.entries를 쓰면, object의 요소가 [key, value]페어로 배열이 되어 나온다
그걸 키값은 index[0]로, value값은 index[1]로 접근해서 sort한뒤, map매소드로 index[0]만 남겨버리면 된다.
사실 간결한데 , 사용법을 모르면 정말 어렵다
꼭 익혀둬야함!