WeCode Kata Day 9

luneah·2021년 12월 9일
0

WeCode Kata

목록 보기
9/20
post-thumbnail

문제

nums는 숫자로 이루어진 배열이다. 가장 자주 등장한 숫자를 k 개수만큼 return하라.

nums = [1,1,1,2,2,3],
k = 2

return [1,2]

nums = [1]
k = 1

return [1]

Thinking Algorithm

  1. 각각의 숫자 개수를 파악하고 객체에 저장
    ㄴ obj = { '숫자' : 개수 }
  2. obj의 value값을 비교하여 key값 내림차순 정렬
    → 배열로 변함
  3. k만큼 배열을 자름
  4. key값이 string 타입이기 때문에 number 타입으로 변환하여 반환

Code

function topK(nums, k) {
  let obj = {};
  
  for (let i=0; i < nums.length; i++) {
    (nums[i] in obj) ? obj[nums[i]] ++ : obj[nums[i]] = 1
  }
  let arr = Object.keys(obj).sort(function(a, b) {
    return obj[b] - obj[a];
  })
  return arr.slice(0, k).map(el => Number(el));
}

💬   Number는 하나씩만 적용되기 때문에 map을 이용해 배열을 순환하여 배열 전체를 바꿔주었다.
💡   sort 함수로 배열을 내림차순 정렬하는 법과 배열 요소의 개수를 비교할 때에는 객체를 쓰면 좋다는 점을 알게 되었고 '속성' in 객체는 해당 속성이 그 객체 안에 있는가를 물어볼 때 사용한다.

profile
하늘이의 개발 일기

0개의 댓글