문제
nums는 숫자로 이루어진 배열입니다. 가장 자주 등장한 숫자를 k 개수만큼 return해주세요.
나의 코드
function topK(n,k) { // n 배열의 요소들의 각각의 개수를 구해 객체로 만든다 1 | const obj = {}; 2 | for (let i = 0; i < n.length; i++) { 3 | if (!obj[n[i]]) { 4 | obj[n[i]] = 0; 5 | } 6 | obj[n[i]]++ 7 | } 8 | // 그런데 객체로 만드는 과정에서 key를 기준으로 자동 정렬되기 때문에 value를 기준으로 정렬한다 9 | const sortedNums = Object.values(obj).sort(function(a, b) { 10| return b - a;}); 11| // 정렬한 value인 sortedNums에서 k만큼 뽑고 그 뽑힌 value로 key를 구한다 12| const result = []; 13| for (let j=0; j<k; j++){ 14| result.push(Number(Object.keys(obj).find(key => obj[key] === sortedNums[j]))); 15| } 16| // 최종 결과를 반환한다 17| return result 18| }
let n = [1,1,1,1,2,2,2,3,3,4] . 2 | for (let i = 0; i < n.length; i++) { 3 | if(!obj[n[i]]) 4 | obj[n[i]] = 0; . 설명 : 3 | obj {n : i} 4 | n 배열안에 있는 값이 obj{key :} key 값이 된다. | for문을 돌면서 | obj[n[i]] |,즉 { n 배열의 i 번째 값이 }