Code-kata 9일차
function getKeyByValue(object, value) {
return Object.keys(object).find(key => object[key] === value);
}
function topK(nums, k) {
// 여기에 코드를 작성해주세요.
const obj = nums.reduce((t, a) => { if (t[a]) { t[a]++ } else { t[a] = 1 } return t }, {});
const objValues = Object.values(obj);
const objValDescending = objValues.sort((a,b) => b-a);
const objValDescSlice = objValDescending.slice(0,k);
let arr = []
for (let i=0; i<objValDescSlice.length; i++) {
arr.push(Number(getKeyByValue(obj, objValDescSlice[i])))
}
return arr
}
코드카타 7일차의 logic와 유사했다. 먼저 각 숫자에 대한 중복 개수를 obj로 만들어서 해당 숫자를 key로 부여하고 중복개수를 value로 설정하였다. 그리고 내림차순으로 정렬하여 가장 많이 중복된 숫자 순으로 요소 순서를 정하였다.
k값에 따라 요소의 개수를 앞에서 부터 몇개를 반환할 지 결정하여야하기 때문에 slice의 end값을 k로 설정한다.
그 후 빈 배열을 만들어서 slice된 배열의 요소에 해당하는 obj의 키값을 푸쉬해주면 정답을 얻을 수 있다.(key값은 string이기 때문에 Number()처리를 해주어야함)
Author And Source
이 문제에 관하여(Code-kata 9일차), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@klqwrx7004/Code-kata-9일차저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)