이번주에 코드카타를 하면서 풀었던 문제에 대해 리뷰하고 정리해보겠습니다.
nums 는 숫자로 이루어진 배열입니다.
가장 자주 등장한 숫자를 k 개수만큼 return 해주세요
nums = [1,1,1,2,2,3]
k = 2
return = [1,2]
nums = [1]
k = 1
return [1]
function topK(nums, k) {
let obj = {};
// 빈객체를 만든다
for ( i = 0 ; i < nums.length; i ++ ) {
if (!obj.hasOwnProperty(nums[i])) {
obj[nums[i]] = 1;
console.log('obj ; ',obj);
}
else {
obj[nums[i]] += 1;
}
}
// for 문을 돌려서 element 값을 확인한다,
// if 조건을 활용해서, 해당 객체가 property로
// nums[i]값을 가지고 있는지를 확인하고 없을 경우
// 객체의 프로퍼티를 설정하고, 1씩 증가할 수 있도록 한다.
var result = Object.keys(obj).map(function(key) {
return [Number(key), obj[key]];
});
console.log(result);
// map 함수를 활용해서 이중배열을 만든다.
// 객체의 각 요소를 map 함수를 활용해서, [ key, key값] 모양으로 이중배열을 생성
result.sort(function compareNums(a,b){
console.log('a:', a[1]);
console.log('b:', b[1]);
return b[1]- a[1];
});
console.log('resort:', result);
// 만든 이중배열을 result라는 변수에 담아, 두번째 key값(숫자가 나온 횟수) 을 기준으로 내림차순으로 정렬한다
let getNums = [];
for (i=0; i<k; i++){
getNums.push(result[i][0]);
console.log('getNums:', getNums);
}
return getNums;
}
// 정렬 후 for 문을 활용해서 k 개수의 직전까지 for문을 돌려서 빈 객체에 push해서 가장 많이 나온 값을 빈 배열에 넣는다 !
topK([1,1,1,2,2,3,4,4,4,4], 2);
이렇게 하면 문제 해결 끝~!!
map 함수는 array 안에 element 를 인자로 삼아서, 함수를 실행하는 method 다 !
내림차순으로 배열을 정리해주는 함수
arr.sort(function compaereNums(a,b){
return b -a;
});
b값과 a값을 비교해서 sorting 해주는 함수다
객체명.hasOwnProperty(property name)
객체가 property name을 가지고 있는지 확인하는 method!