#1512

Donghee Choi·2023년 1월 16일

leetcode

목록 보기
10/13

1512. Number of Good Pairs

내 답안

/**
 * @param {number[]} nums
 * @return {number}
 */
var numIdenticalPairs = function(nums) {
  nums.sort();
  let pair = 0;
  let count = 0;
  
  for (let i = 1; i < nums.length; i++) {
    if (nums[i] !== nums[i - 1]) {
      pair += ((count + 1) * count) / 2;
      count = 0;
    } else {
      count++;
    }
  }

  pair += ((count + 1) * count) / 2;
  return pair;
};

안좋은 답안이라고 생각하면서도 작성한 답안...
각 아이템들이 몇개있는지를 구해서 (count * (count-1))/2 를하면 pair 갯수를 구하는거까진 생각했는데 합리적인 코드를 생각해내지 못했다.

다른 답안

// time O(N) space O(N)
var numIdenticalPairs = function(nums) {
    const map = {}
    let count = 0
    
    for (const number of nums) {
        if (map[number]) {
            count += map[number];
            map[number] += 1;
        } else {
            map[number] = 1;
        }
    }
    return count
};

각 아이템의 갯수를 세면서 또 있으면 저장해뒀던 갯수를 더하는식...

function numIdenticalPairs(nums) { // O(n)
  const map = nums.reduce((m, n, i) => m.set(n, (m.get(n)||0) + 1), new Map());
  return [...map.values()].reduce((num, n) => num + n * (n - 1) / 2, 0);
};

reduce로 각 아이템 갯수를 map에 저장하는 로직은 찾아봤었다.
갯수를 저장한 map을 reduce로 공식을 합하면 되는거였는데... 여기까지 생각못한게 아쉽..

profile
frontend, vuejs, react, docker, kubernetes

0개의 댓글