function topK(nums, k) {
// 예시 : [2,2,3,3,3,1]
let obj = {};
let result = [];
// 1. 오름차순 정렬
nums.sort(); // 넣으면 에러 뜸
console.log(nums);
// 2. {등장 횟수 : 숫자} 객체 만들기
for (let i = 0; i < nums.length; i++) {
let key = nums.filter(e => e === nums[i]).length;
let value = nums[i];
obj[key] = value;
}
console.log(obj);
// 3. 등장 횟수 내림차순 정렬
const keys = Object.keys(obj);
console.log(keys);
let numsArray = [];
for (key of keys) {
numsArray.push(Number(key));
numsArray.sort((a, b) => b - a);
}
console.log(numsArray);
// 4. k등까지 등장 횟수 뽑고, obj에서 해당하는 숫자 리턴
for (let i = 0; i < k; i++) {
result.push(obj[numsArray[i]]);
}
return result;
}
console.log(topK([2,3,2,3,2,1], 2));
module.exports = { topK };
오름차순 정렬을 하면 오류가 뜨는데 내림차순 정렬을 하면 오류가 나지 않았다. 아직까지도 왜 그런지는 참 의문이다. 굳이 정렬을 해줄 필요는 없었지만, 깔끔하게 정리된 채로 풀고 싶어서 정렬을 사용했다. 처음엔 객체를 만들때 { 숫자 : 등장 횟수 } 를 사용했는데, 이것 보다는 { 등장횟수 : 숫자 } 이렇게 써서 풀어주는 편이 더 쉽게 문제를 해결할 수 있었던 것 같다. filter함수를 사용하는 것이 아직도 익숙하지 못해서 많이 힘들었다. 좀 더 filter함수를 가지고 많이 사용해보아야할 것 같다.
# filter 함수
자바스크립트의 filter 메서드는 조건을 주고 해당 조건이 참인 요소를 모아 새로운 배열로 반환하는 메서드이다.
배열에서 원하는 데이터만 추출 하고 싶을 때 자주 사용하는 사용성이 좋은 메서드이다.
여기서 잘 기억하고 있어야 하는 부분은 새로운 배열을 반환해준다는 점이다.
또한 filter는 중복값을 제거해주지 않는다. 따라서 중복값이 나올 수 있다.
아래는 filter함수의 사용법 3가지이다.
① list.filter(function(word){return word.length >=6; })
② list.filter(word => word.length >= 6);
③ function filterCallbackFunction(word){return word.length >= 6; };
list.filter(filterCallbackFunction);
'알고리즘' 카테고리의 다른 글
[CodeKata] Week 2 - Day 3 ( JavaScript ) (0) | 2022.02.26 |
---|---|
[CodeKata] Week 2 - Day 2 (JavaScript) (0) | 2022.02.26 |
[CodeKata] Week 1 - Day 5 ( JavaScript ) (0) | 2022.02.18 |
[CodeKata] Week 1 - Day 4 ( JavaScript ) (2) | 2022.02.17 |
[CodeKata] Week 1 - Day 2 ( JavaScript ) (0) | 2022.02.15 |
댓글