숫자로 이루어진 배열에서 자주 등장하는 숫자를 return 해주기

YS·2022년 7월 15일
0

CodeKata

목록 보기
1/2

문제 풀이


nums = [1, 1, 1, 2, 2, 2, 2, 3, 3];
k = 2 라고 가정 했을 때

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

우선 obj라는 변수명의 빈 객체를 생성해주고 obj 안에 nums[i]값의 key 가 있을 시 obj[nums[i] 의 value를 1증가 시켜주고 없을 시 obj 안에 nums[i]의 키가 생성되고 1의 value가 부여된다. 그러면 안의 숫자들이 몇개씩 있는지 들어있는 객체가 생성된다.

let result = Object.keys(obj); // ['1','2','3']
  result = result.sort((a, b) => obj[b] - obj[a]); // ['2','1','3']
  result = result.map((index) => Number(index)); // [2,1,3]
  result = result.slice(0, k); // [2,1]
  return result;

result라는 obj의 키 값을 담는 변수를 생성해준 뒤 obj 의 키 값을 기준으로 sort 메서드를 사용하여 내림차순으로 키 값의 위치를 정렬시켜준다. 그 다음 배열안에는 문자열로 들어가 있는 상태이기 때문에 이를 Number 형태로 바꿔준 뒤 k의 개수 만큼 나타내 주어야 하기 때문에 slice 메서드를 이용하여 index[0] 부터 index[k] 전까지 반환하여 return 해주면 끝이다.

P.S 이해 하기 쉽게 result 를 여러번 썻지만 다 붙여서 쓰면 더 가독성 있는 코드로 작성할 수 있다 !

profile
"나의 개발 노트"

0개의 댓글