[TIL #21 WECODE] Code Kata

Whoyoung90·2021년 3월 11일
0
post-thumbnail

210311 WECODE #21 Code Kata

문제

nums는 숫자로 이루어진 배열입니다.
가장 자주 등장한 숫자를 k 개수만큼 return해주세요.

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

return [1,2]

nums = [1]
k = 1

return [1]

나의 답변

function topK(nums, k) {
  let obj = {};
  for( let i=0; i<nums.length; i++){
    (nums[i] in obj) ? 
     obj[nums[i]] += 1 : obj[nums[i]] = 1
  }
 //console.log(obj); { '1': 2, '2': 4, '3': 1 }

let test = Object.keys(obj).sort(function(a,b){
  return obj[b] - obj[a]
})
//console.log(test); [ '2', '1', '3' ]

test.slice(0, k);
return test.slice(0, k).map( e => parseInt(e));
}
//[ 2, 1 ]
topK( [1,1,2,2,2,2,3], 2 )
  • obj란 빈 객체를 만들어놓고 for문을 돌린다
  • for문이 돌면서 빈 객체 안에서 (nums[i] in obj) ? obj안에 nums[i]가 존재하지 않는다면, obj[nums[i]] = 1로 자체적으로 새로 추가해준다 [ '1' : 1 ]
  • obj안에 nums[i]가 존재한다면 obj[nums[i]] += 1 기존 key값에 +=1
  • 결과값은 { '1': 2, '2': 4, '3': 1 }
  • 이제 높은 value값 순서대로 나열하고 싶다. value값을 비교해 내림차순 으로 정렬하기 위해 sort함수를 사용

sort 함수 내림차순

.sort( function(a,b){ return obj[b] - obj[a] } )
.sort( (a,b) => obj[b] - obj[a] )
.sort( (a,b) => b-a )
sort함수의 매개변수 a와 b는 배열의 자리이다.
a는 뒷자리, b는 앞자리이다. 그래서 함수를 이용해 뒷자리와 앞자리를 비교하는데,
return 값이 음수 일경우, sort는 배열의 자리를 변경해주고,
값이 양수 일경우, sort는 배열의 자리를 그대로 반환한다.

sort 함수 오름차순
.sort( (a,b) => a-b )

  • sort(function(a,b){ return obj[b] - obj[a] }을 이용하여 추출한 value값이 -2 3 1

  • 우리가 필요한건 key값이니 Object.keys(obj)를 붙여주자!!!

  • 결국 높은 순서대로의 key값은 결국 [ '2', '1', '3' ]

  • 이 중에서 k값 만큼만 추출하려면 slice함수를 이용! test.slice(0, k); => [ '2', '1' ]

  • 마지막으로 우리가 뽑아야 하는건 숫자값인데
    인자 하나 변경 => parseInt
    전체 배열 값 변경=> map함수

  • return test.slice(0, k).map( e => parseInt(e));

  • [1, 2]

많은 함수들이 사용되었다...
부족했던 함수들은 다시 정리해보자
삼항연산자 & sort() & Object.keys() & slice() & map()

profile
비전공으로 일식 쉐프가 되었듯, 배움에 겸손한 프론트엔드 개발자가 되겠습니다 :)

0개의 댓글