코딩 테스트/leetCode

[leetCode] 1512. Number of Good Pairs (Python)

우주바다 2022. 10. 18. 14:24
728x90

▼ 문제 바로가기 (링크) 

https://leetcode.com/problems/number-of-good-pairs/

 

Number of Good Pairs - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

 


주어진 정수 리스트에서 2개씩 뽑아서 만들 수 있는 조합 중,

각 튜플 안의 수 2개를 더한 값이 같은 것 끼리 모았을 때

짝의 수가 가장 많은 조합을 찾고 정수로 반환하는 문제.

 

먼저 조합순열에 대한 개념을 한 번 더 확인했다.

조합 : n개에서 r개를 선택하는 경우의 수. 순서는 고려하지 않음.

(1,2를 뽑았다면 2,1은 선택하지 않음)

순열 : 순서까지 고려함. (ex.  1,2 와 2,1 은 다름. )

 

from itertools import combinations

 

 

이터레이션, 이터레이터 : 반복, 반복자.

 

조합과 순열은 itertools 라이브러리를 사용한다.

기본 문법은 위와 같이

import 해준 후,  combinations( 반복가능한 객체, 뽑을 개수).

 

다중 for문으로 만들 수 있지만, 전용 모듈이 실행 속도가 더 빠르므로

바로 검색해서 기본 문법대로 만들었다. 

from itertools import combinations

class Solution:
    def numIdenticalPairs(self, nums: List[int]) -> int:
        
        comb = list(combinations(nums, 2))
        print(comb)

새로운 조합튜플 형태로 리스트 안에 담겨 반환된다.

# print 결과
[(1, 2), (1, 3), (1, 1), (1, 1), (1, 3), (2, 3), (2, 1), (2, 1), (2, 3), (3, 1), (3, 1), (3, 3), (1, 1), (1, 3), (1, 3)]

이렇게 중첩된 배열(리스트)는 2차원 배열이라고 한다.

좌표처럼 각 요소의 인덱스를 두 번 입력해서 접근할 수 있다.

참고: https://dojang.io/mod/page/view.php?id=2291 


from itertools import combinations   

class Solution:
    def numIdenticalPairs(self, nums: List[int]) -> int:           
        comb = list(combinations(nums, 2))        
        tmp = []       # 원소가 같은 튜플만 담을 리스트
        t = len(comb)         
          
        for i in comb:  
            if i[0] == i[1] :       
                tmp.append(i)                                     
        return len(tmp)

완성된 코드. 

728x90
반응형