Algorithm - 자주 등장한 숫자 n개만큼 반환하기

rachel's blog·2021년 10월 31일
0

Algorithm

목록 보기
10/11
post-thumbnail

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 n = [...new Set(nums)];
  let arr = [];
  let newArr=[];
  for(let i in n){
    let numArr = [...nums.filter(item =>item === n[i] )];
    arr.push(numArr);
  }
  arr.sort((a,b) => b.length-a.length);
  for(let j=0; j<k; j++){
    newArr.push(arr[j][0])
  }
  return newArr

}

예를 들어 nums=[1,2,2,2,3,3]이라고 가정해보자.

  1. nums배열에서 중복된 숫자들을 제거한 배열을 n이라는 변수에 담기 n = [1, 2, 3]
  2. nums중에 n[0]=1, n[1]=2, n[2]=3 인 요소들을 filtering해서 새로운 배열인 numArr에 담는다.
    numArr=[1], [2,2,2], [3,3]
  3. 이 numArr 전체를 감싸줄 arr배열을 하나 더 만들어서 담고(arr = [ [ 1 ], [ 2, 2, 2 ], [ 3, 3 ] ] ), k개수만큼 numArr각 요소의 길이가 긴 것을 반환해야 하므로, 내림차순으로 정렬을 시키기 위해 sort를 사용한다.
    ✔ 이 때의 유의사항은 내림차순 시 각 요소의 length를 비교해서 내림차순 해야 하므로 b.length - a.length로 작성한다.
  4. sort까지 완료한 arr의 모습은[ [ 2, 2, 2 ], [ 3, 3 ], [ 1 ] ]
  5. 내가 알고싶은건 length다. 각각 arr[0][0], arr[1][0] 이런식으로 배열안의 배열의 첫번째 인덱스 요소만 반환하면 되므로, arr를 for 반복문으로 돌려서 arr[j][0] j번째 인덱스요소의 첫번째 인덱스 요소를 반환하도록 하면 답을 구할 수 있다.
profile
블로그 이전 : https://rachelslab.tistory.com/

0개의 댓글