본문 바로가기
Research/Coding Test

해시_폰켓몬

by RIEM 2023. 11. 17.

나의 풀이

function solution(nums) {

  const dict = {};
  nums.forEach(el => {
    if (dict[el]) {
      dict[el]++;
    } else {
      dict[el] = 1;
    }
  })
  
  const dictLen = Object.values(dict).length;
  const halfNum = Math.floor(nums.length/2)

  return dictLen < halfNum ? dictLen : halfNum
}

배열을 루프돌면서 dict에 쌓아주고, 그 값 종류의 개수가 주어진 총 폰켓몬 n/2 수보다 적으면 리턴하고 그렇지 않으면 n/2 수를 리턴한다.

 

타인의 풀이

function solution(nums) {
  const max = nums.length / 2;
  const arr = [...new Set(nums)];

  return arr.length > max ? max : arr.length
}

배열 개수의 n/2를 맥스값으로, 주어진 배열을 Set화시켜서 중복을 없앤 뒤 다시 배열로 만든다.

두 길이를 비교하고 max가 더 작으면 max를 리턴 그렇지 않으면 반대를 리턴.

로직은 동일하지만 nums를 Set화 시켜서 중복값을 없앴다는 점이 인상적인 방식이다. 나의 반복문을 한줄로 처리할 수 있는 방법이다.

 

Take away

배열 중복값을 제거하는 로직은 [...new Set(arr)]과 같이 Set로 변환 후 다시 배열복사를 하는 방식으로 구현한다.

'Research > Coding Test' 카테고리의 다른 글

정렬_K번째수  (0) 2023.11.18
해시_전화번호 목록  (0) 2023.11.18
프로그래머스_lv0_안전지대  (0) 2023.11.17
해시_완주하지 못한 선수  (0) 2023.11.16
Leetcode_bubbleSort_Height Checker  (0) 2023.04.19

댓글