본문 바로가기
LeetCode

1512. Number of Good Pairs

by 싼쵸 2022. 5. 28.
반응형

문제

문제 설명

nums 배열의 요소들이 인덱스 번호 0번부터 끝까지 검사하면서 같은 숫자가 몇 개인지 구한 다음 결과 값으로 돌려주는 거다.

 

내 현재 풀이

/**
 * @param {number[]} nums
 * @return {number}
 */
var numIdenticalPairs = function(nums) {
    let cnt = 0
    for(let i in nums){
        i = Number(i);
        for(let j = i+1; j < nums.length; j++){
            nums[i] === nums[j] && cnt++;
        }
    }
    return cnt;
};

for문을 두번 돌려 정답을 구했고, 중간에 Number 함수를 쓴 이유는 0번째 인덱스일 때 01로 결과가 나와서 i를 숫자로 변환해주고 넘겨주었다.

 

내 예전 풀이

/**
 * @param {number[]} nums
 * @return {number}
 */
var numIdenticalPairs = function(nums) {
    let cnt = 0;
    for(let i = 0; i < nums.length; i++){
        for(let j =nums.length-1; j >=0; j--){
            if(nums[i] ===nums[j] && i < j){
                cnt++;
            }
        }
    }
    return cnt;
};

풀이 방식이 크게 달라지지는 않았지만, 풀이 시간이 달라지긴 했다. 가장 큰 차이점 예전 풀이 두 번째 for문에서 뒤부터 체크를 해주었다는 정도??

 

다른 사람 풀이

// 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
};

객체 형태로 담아서  답을 구한 형태다.

객체가 없으면  1을 넣어주었고, 반복된 요소가 발견 있으면 + 1을 해주었다.

왜 이번에 나는 이런 생각을 못했을까 ㅠ

 

반응형

댓글