[codekata]Week2_Day4
문제
nums는 숫자로 이루어진 배열입니다. 가장 자주 등장한 숫자를 k 개수만큼 return해주세요.
nums = [1,1,1,2,2,3],
k = 2
=> return [1,2]
nums = [1]
k = 1
=> return [1]
풀이
- 배열에 존재하는 숫자들을 key로, 그 숫자들의 개수를 value로 하는 객체 numsObj 만들기
- numsKeys 변수에 객체의 키들을 배열로 저장 -> Object.keys()
- numsKeys 배열의 요소들을 내림차순 정렬 후 반환값은 numsObj에 key로 접근해서 정렬된 value들의 배열로 반환 -> Array.sort()
- 문자열로 반환된 배열을 sortedArr 변수에 정수 배열로 저장 -> Array.map()
- sortedArr 요소들 중 k개수만큼만 반환 -> Array.slice()
function topK(nums, k) {
// 여기에 코드를 작성해주세요.
let numsObj = {};
for (let num of nums) {
numsObj[num] == undefined? numsObj[num] = 1 : numsObj[num]++;
}
let numsKeys = Object.keys(numsObj);
let numsValues = numsKeys.sort((a,b) => {return numsObj[b] - numsObj[a]});
let sortedArr = numsValues.map((e) => parseInt(e));
return sortedArr.slice(0, k);
}
☑기억할 것
배열에 존재하는 숫자들의 개수 세기: 빈 객체를 만들고 배열을 순회하면서 배열의 요소들을 key로 객체에 접근 -> undefined를 반환할 경우 처음 만나는 요소이므로 value를 1로 해서 객체에 추가, 이미 존재할 경우 value + 1
let obj = {}; for (let e of array) { obj[e] == undefined? obj[e] = 1 : obj[e]++; }
- 문자열 타입 요소들의 배열으로 정수 배열 만들기
numArr.map((e) => parseInt(e));