codeKata를 진행하면서 새롭게 알게된 개념과 나의 풀이와 동기분의 답안의 일부분
💡 nums는 숫자로 이루어진 배열입니다. 가장 자주 등장한 숫자를 k 개수만큼 return해주세요.
👉 나의 답안
function topK(nums,k){
const numberMap = {
1 : 0,
2: 0,
3: 0,
}
let answer = []
let result
for(let i=0; i<nums.length; i++){
if(nums[i] in numberMap){
numberMap[nums[i]]++
}else{
numberMap[nums[i]]=1
}
}
let numbers = Object.keys(numberMap).sort((a,b)=> numberMap[b]-numberMap[a])
for(let j=0; j<k; j++){
answer.push(Number(numbers[j]))
}
return answer
}
코드카타 짝이신 동기분께서 Map을 이용해서도 풀어보라고 권유해주셔서 공부하게 된 Map
Map
객체는 키-값 쌍을 저장하며 각 쌍의 삽입 순서도 기억하는 콜렉션이다.
요소의 삽입 순서대로 원소를 순회한다. for...of 반복문은 각 순회에서 [key, value]로 이루어진 배열을 반환한다.
Map.prototype.size
: Map 객체에 들어있는 key/value pair의 수를 반환한다.
Map.prototype.clear()
: Map 객체의 모든 key/value pair를 제거한다.
Map.prototype.delete(key)
: 주어진 키와 해당되는 값을 제거하기 전에 Map.prototype.has(key)가 반환했던 값을 반환한다. 그 후 Map.prototype.has(key)는 false를 반환한다.
Map.prototype.forEach(callbackFn)
: 객체 안에 존재하는 각각의 key/value pair 에 집어넣은 순서대로 callbackFn을 부른다.
Map.prototype.get(key)
: 주어진 키에 해당되는 값을 반환하고, 만약 없으면 undefined를 반환한다.
Map.prototype.has(key)
: 객체 안에 주어진 key/value pair가 있는 지 검사하고 Boolean값을 반환한다.
Map.prototype.set(key,value)
: 객체에 주어진 키에 값을 집어넣고 객체를 반환한다.
👉 내가 object를 통해 구현한 코드를 나의 코드카타 짝은 Map을 통해 구현하였다.
const numberMap = new Map();
for (const num of nums) {
if (numberMap.has(num)) {
numberMap.set(num, numberMap.get(num) + 1);
} else {
numberMap.set(num, 1);
}
}
아직은 사용이 익숙하지 않아서 앞으로 Map을 자주 사용해봐야겠다.