210826 배열의 요소의 등장 빈도수
문제
nums
는 숫자로 이루어진 배열입니다.
가장 자주 등장한 숫자를 k
개수만큼 return해주세요.
nums = [1,1,1,2,2,3],
k = 2
return [1,2]
nums = [1]
k = 1
return [1]
문제이해
topK() 함수의 받을 매개변수는 nums 배열과 k 정수이고
배열에서 빈도수가 높은 것을 찾아야 하기 때문에 배열 요소의 개수를 비교할 건데
배열 요소의 개수를 비교할 때에는 객체를 쓰면 좋다
따라서 빈 객체 하나를 선언할 것이다
그리고 배열의 요소를 처음부터 끝까지 찾을 것이기 때문에 for문을 돌릴 것이다
정답
function topK(nums, k) {
let obj = {};
for (let i in nums) {
nums[i] in obj
? obj[nums[i]] += 1
: obj[nums[i]] = 1
}
let sorted = Object
.keys(obj)
.sort((a, b) => obj[b] - obj[a])
return sorted
.slice(0, k)
.map(x => parseInt(x));
}
코드설명
- 빈 객체 obj 먼저 선언
let obj = {};
- 배열의 요소를 하나씩 꺼내면서
요소를 꺼낼 때에는obj[i]
도 좋긴 하지만let i in nums
이 더 편하다고 한다
그리고
객체에 해당하는 요소가 있으면
→ 그 요소의 키값 (value)에 +1
처리를하고
객체에 해당하는 요소가 없으면
→ 그 요소의 키값 (value)을 1
로 부여한다
for (let i in nums) {
nums[i] in obj
? obj[nums[i]] += 1
: obj[nums[i]] = 1
}
/*
nums = [1,1,1,4,4,3];
=>
obj = {
1: 3,
4: 2,
3: 1,
}
*/
- obj 객체의 속성 key를 배열로 반환하고
Object.keys(obj)
인자로 받은 obj 객체의 속성이름을 배열로 반환한다
Object.keys(obj)
// [1,4,3]
- 그렇게 반환된 배열의 속성 키를 키값에 대해서 오름순차적으로 정렬해준다
(기존의 배열이 변경됨)
sort(익명함수)
sort함수 안에 있는 익명함수는 두개의 요소씩 비교하는데
a자리에는 뒤에 있는 요소, b자리에는 앞에 있는 요소가 들어간다
- 익명함수의 return값이 양수 → 오름차순정렬
- 익명함수의 return값이 음수 → 내림차순정렬
- 익명함수의 return값=0 → 변경되지않음
sort함수 더보기
let sorted = Object.keys(obj).sort((a, b) => obj[b] - obj[a])
// `a=4, b=1`& `a=3, b=1` & `a=4, b=1` 이런식으로 비교해서
// return값에 따라 정렬해서 배열을 변경해준다
- sorted된 배열의 요소인 객체 obj의 key → 문자열이기 때문에 정수로 반환해준다
return sorted.slice(0, k).map(x => parseInt(x));
Author And Source
이 문제에 관하여(210826 배열의 요소의 등장 빈도수), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@beanlove97/210826-배열의-요소의-등장-빈도수저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)