가장 많이 중복된 숫자 k개 찾기

군밤먹으면서코딩·2021년 7월 1일
0

알고리즘

목록 보기
13/14
post-thumbnail

문제

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

return [1,2]

nums = [1]
k = 1

return [1]

비루한 내 코드...

function topK(nums, k) {
  // 여기에 코드를 작성해주세요.
  let nums2 = new Set(nums);
  let arr = [];

  for (let i = 0; i < nums.length; i++) {
    let t = nums.filter(ele => {
      return nums[i] === ele;
    });
    arr.push(t.length);
  }
  let arr2 = new Set(arr);

  const a = Array.from(nums2); //투입 배열
  const b = Array.from(arr2); //중복수 많은거
  const copyB = [...b]; // 배열의 카피본
  let answer = [];
  let count = 0;

  while (count < k) {   // 최대 값을 찾아 카피b에서 자르고
    					// b의 index 값을 answer에 push 
    					// k번 반복!
   
    let max = Math.max(...copyB);

    let idx = b.indexOf(max);

    answer.push(a[idx]);
    let z = copyB.splice(b.indexOf(max), 1);

    count++;
  }

  return answer;
}

따라하고 싶은 팀원분의 코드


function topK(nums, k) {
  let obj = {}
  for (let i = 0 ; i < nums.length ; i++){
    if(nums[i] in obj){
      obj[nums[i]] += 1 ;
    } else {
      obj[nums[i]] = 1 ;
    }
  }
  let answer = Object.keys(obj).sort(
    function(a,b){return obj[b] - obj[a]}
  )
  let result = answer.slice(0,k)
  return result.map(x => Number(x))
}
topK([5,5,5,3,3,3,3,3,2,2],2)
  • 꾸역꾸역 복사하고~ 자르고~ 해서 완성한 코드가 팀원분 것을 보니 반토막이 나있었다 ㅋㅋㅋㅋㅋㅋ

  • 객체를 문제 풀 때 더 적용해 보려 노력해야겠따🧐

0개의 댓글