Algorithm | Code Kata #9

Wook·2021년 12월 9일
0

Algorithm | Code Kata

목록 보기
9/21

배열 안의 각 수가 등장한 빈도수에 따라 k개의 갯수만큼 내림차순으로 배열로 받아 return해주는 문제이다. 객체의 성질을 활용하여 각 수와 해당 빈도수를 지정해주고, 내림차순으로 정렬해주어 k개만큼만 배열로 반환해주면 되는 문제기에 논리적 접근은 어렵지 않았다. 다만 내림차순 정렬을 하는 과정에서 sort의 내장함수를 통해 구현할 수 있었다는 점이 이 문제를 풀면서 중요했던 점이라고 생각한다.


📲 My Code

function topK(nums, k) {
  // 여기에 코드를 작성해주세요.
  let newObj = {} //  숫자와 그에 해당하는 빈도를 key와 value로 지정할 객체
  let sortObj = [] // 객체를 정렬하기 위한 배열
  let finalArr = [] // 최종 return할 배열

  // 객체에 각 숫자와 그에 해당 빈도 저장
  for (let i in nums){
    newObj[nums[i]] ? newObj[nums[i]]+=1:newObj[nums[i]]=1
  }
  
  // 객체를 배열로 저장
  for (let number in newObj) {
    sortObj.push([number, newObj[number]]);
  }
  // 저장한 배열을 두번째 인자의 내림차순으로 정렬
  sortObj.sort(function(a, b) {return b[1] - a[1];});

  // k 개수만큼 return할 배열에 push
  for (i=0; i<k; i++){finalArr.push(Number(sortObj[i][0]))}

  return finalArr // 최종 값 return
}

느낀 점

이번 문제는 접근은 쉽지만 내림차순 구현 방법을 모른다면 구현에서 하드 코딩으로 접근하여 시간을 많이 사용할 수 있는 문제였다. (물론 지금 방식도 하드 코딩이긴 하다만..) 내림차순으로 정렬을 하기 위해 객체를 배열로 바꿔주었고, 그 배열을 sort의 내장함수
(sortObj.sort(function(a, b) {return b[1] - a[1]}))를 통해 구현해야 했다. 더 좋은 방법이 분명 많을 것이기 때문에 다른 사람들의 풀이들을 보며 더 효율적인 코드 작성 방법을 익혀야 할 것같다. (물론 sort의 저 내장함수는 매우 유용한 기능인 것 같다!)

profile
지속적으로 성장하고 발전하는 진취적인 태도를 가진 개발자의 삶을 추구합니다.

0개의 댓글