알고리즘 PS/data structure

1512. Number of Good Pairs 파이썬 defualtdict 이용해서 해시로 풀기

explorer999 2024. 6. 15. 20:46

 

Number of Good Pairs - LeetCode

 

 

<처음 풀이>

class Solution:
    def numIdenticalPairs(self, nums: List[int]) -> int:
        count = 0
        for i in range(len(nums)):
            for j in range(len(nums)):
                if nums[i] == nums[j] and i<j:
                    count+=1

        return count

문제에 적힌대로 풀면 통과는 되지만 시간복잡도가 O(n^2)인 말 그대로 복잡한 풀이..

 

 

<배운 풀이>

from collections import defaultdict

class Solution:
    def numIdenticalPairs(self, nums: List[int]) -> int:        
        count_dict = defaultdict(int)
        count = 0
        for num in nums:
            count += count_dict[num]
            count_dict[num] += 1
        return count

 

해시맵(딕셔너리)를 사용해서 각 숫자가 누적 몇 번 출현했는지를 저장한다.

시간복잡도를 O(n)으로 줄일 수 있다.

 

 

1. count_dict = 각 숫자의 출현 횟수를 저장하는 딕셔너리 설정, 처음에는 모두 0으로 int초깃값을 준다.

2. count는 좋은 쌍의 개수를 저장하는 변수이다.

 

3. 배열 nums를 순회하면서 count_dict[num] 값을 count에 더한다. 현재 숫자가 지금까지 몇 번 출현했는지에 따라 좋은 쌍의 개수를 증가시키는 것.

4. 그 후에 count_dict[num] 값을 1 증가시킨다.

 

5. 모든 숫자를 순회한 후, count를 반환한다.