nums는 숫자로 이루어진 배열입니다. 가장 자주 등장한 숫자를 k 개수만큼 return해주세요.
nums = [1,1,1,2,2,3],
k = 2
return [1,2]
nums = [1]
k = 1
return [1]
젤많은애부터 배열에 k번 넣어 반환하는 함수 작성해라
0.메서드 잘 못쓰니 집념으로 물고늘어지기
1.nums에서 중복제거한 배열 uniqueNums구하기
2.uniqueNum의 요소를 key로하는 obj만들기(값은 일단 0으로)
3.nums를 순회하며 요소를 카운트해서 obj의 값에 key의 요소의 빈도 저장
4.k번 반복하는 반복문에서 value값이 큰 key를 ret에 push
5.ret의 모든 요소를 숫자로 바꿔 반환(key는 문자열이니깐)
function topK(nums, k) {
// 여기에 코드를 작성해주세요.
let obj = {};
let uniqueNums = [];
let doubledArr;
let maxValue;
let maxKey = '';
let ret = [];
nums.forEach((el) => {
if (!uniqueNums.includes(el)) {
uniqueNums.push(el);
}
});
uniqueNums.forEach(el => obj[el] = 0);
nums.forEach(el => obj[String(el)]++);
for (let j = 0; j < k; j++) {
maxValue = 0;
for (let i in obj) {
if (obj[i] > maxValue) {
maxValue = obj[i];
maxKey = i;
}
}
ret.push(maxKey);
obj[maxKey] = 0;
}
for (let i = 0; i < ret.length; i++) {
ret[i] = Number(ret[i]);
}
return (ret);
}
사고 1~3의 과정을 한 번에 처리할 수 있을 것 같음(뭔가 테이블을 만들고 시작하고싶은 불안감 ㅠ)
사고 4~5의 과정도 요소를 숫자로 바꾸면서 push할 수 있을 것 같은데 자린이라 중단 ㅠ 리팩토링 도전해보기