Code-kata 9일차

function getKeyByValue(object, value) {
  return Object.keys(object).find(key => object[key] === value);
}

function topK(nums, k) {
  // 여기에 코드를 작성해주세요.
  const obj = nums.reduce((t, a) => { if (t[a]) { t[a]++ } else { t[a] = 1 } return t }, {});

  const objValues = Object.values(obj);
  const objValDescending = objValues.sort((a,b) => b-a);
  const objValDescSlice = objValDescending.slice(0,k);
  let arr = []
  for (let i=0; i<objValDescSlice.length; i++) {
    arr.push(Number(getKeyByValue(obj, objValDescSlice[i])))
  }
  return arr
}

코드카타 7일차의 logic와 유사했다. 먼저 각 숫자에 대한 중복 개수를 obj로 만들어서 해당 숫자를 key로 부여하고 중복개수를 value로 설정하였다. 그리고 내림차순으로 정렬하여 가장 많이 중복된 숫자 순으로 요소 순서를 정하였다.
k값에 따라 요소의 개수를 앞에서 부터 몇개를 반환할 지 결정하여야하기 때문에 slice의 end값을 k로 설정한다.
그 후 빈 배열을 만들어서 slice된 배열의 요소에 해당하는 obj의 키값을 푸쉬해주면 정답을 얻을 수 있다.(key값은 string이기 때문에 Number()처리를 해주어야함)

좋은 웹페이지 즐겨찾기