728x90
난이도 : medium
a * b = c * d일 때의 tuple (a,b,c,d)의 갯수를 return하는 문제.
a * b = c * d = m인 쌍의 갯수 n을 알아내고, m마다 nP2(= n * n - 1)을 취한 뒤 sum
조합에서 a, b와 c, d 각각 위치를 바꿀 수 있고, (a, b)쌍과 (c, d)쌍의 위치도 바꿀 수 있기 때문에, 그 경우의 수를 고려하면 sum 값에 4를 곱해야 한다.
from collections import Counter
class Solution:
def tupleSameProduct(self, nums: List[int]) -> int:
n = len(nums)
arr = [nums[i]* nums[j] for i in range(n) for j in range(i+1,n)]
count = Counter(arr)
a = Counter([cnt for x, cnt in count.items() if cnt >= 2])
return sum([4 * i * (i-1) * j for i, j in a.items()])
- nums의 다른 요소들끼리 곱한 리스트 arr를 제작
- arr를 Counter 진행하면, 리스트 arr 내의 요소가 몇 개 있는지 count된다.
- count의 값은 주로 {m : n}와 같은 형식인데, 이 문제에서는 쌍의 갯수인 n만 알아내면 되기 때문에, m의 값이 2개 이상인 경우를 또 Counter 진행했다. m의 값이 2개 이상인 이유는, tuple 1개를 만드려면 최소 2개의 쌍이 필요하기 때문
- a의 값은 {n, j} 형식인데, 쌍의 갯수인 n인 경우가 j개라는 의미다. 쌍의 갯수가 n이면 nP2(n * n-1)을 취한 뒤, j를 곱하고, 조합 위치의 경우의 수인 4를 또 곱해준 값을 sum하면 끝
Runtime : 279ms (97.16%)
Memory :57.60MB (10.43%)
728x90
'코딩 공부 > Leetcode' 카테고리의 다른 글
[Python] 142. Linked List Cycle II (0) | 2025.02.08 |
---|---|
[Python] 977. Squares of a Sorted Array (0) | 2025.02.07 |
[Python] 3151. Special Array I (0) | 2025.02.06 |
[Python] 141. Linked List Cycle (0) | 2025.02.05 |
[Python] 707. Design Linked List (0) | 2025.02.04 |