nums는 숫자로 이루어진 배열입니다.
가장 자주 등장한 숫자를 k 개수만큼 return해주세요.
function topK(nums, k) {
let mySet =[...new Set(nums)];
let arrNum = [];
let str = nums.join(",").replace(/,/gi,"");
for(let i = 0;i < mySet.length;i++){
let nStr = new RegExp(mySet[i],'gi');
arrNum.push([mySet[i],str.match(nStr).length])
}
arrNum = arrNum.sort((a, b) => b[1] - a[1]).slice(0,k).map(cur => cur[0] );
return arrNum;
}
join을 잘 이용하면 replace 메서드를 쓰지 않아도 된다.
let str = nums.join(",").replace(/,/gi,"");
// 결과값: [1,1,1] -> [111]
nums.join("");
// 결과값: [1,1,1] -> [111]
값을 계속 가져오지 않고 한 번만 가져오는게 낫다.
for(let i = 0;i < mySet.length;i++){
}
for(let i = 0, len = mySet.length; i < len; i++){
}
어짜피 한 번만 선언될 변수면 그냥 풀어쓰는게 낫다. (복잡하면 선언해주는게 좋다.)
for(let i = 0;i < mySet.length;i++){
let nStr = new RegExp(mySet[i],'gi');
arrNum.push([mySet[i],str.match(nStr).length])
}
for(let i = 0; i < mySet.length; i++){
arrNum.push([mySet[i],str.match(new RegExp(mySet[i],'gi')).length]);
}
Array.from을 쓰면 코드를 여러번 나누지 않아도 한 번에 쓸 수 있다.
for(let i = 0;i < mySet.length;i++){
let nStr = new RegExp(mySet[i],'gi');
arrNum.push([mySet[i],str.match(nStr).length])
}
return arrNum.sort((a, b) => b[1] - a[1]).slice(0,k).map(cur => cur[0] );
return Array.from({length: mySet.length}, (_, i) => [mySet[i], str.match(new RegExp(mySet[i],'gi')).length])
.sort((a, b) => b[1] - a[1])
.slice(0, k).map((v, k) => v[0])
정규식은 컴퓨터에서 계산을 맡긴다는 의미이므로, 쓸 곳과 안 쓸 곳을 잘 구분하는게 좋다!