Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python의 부메랑 수


평면에 쌍으로 구별되는 n개의 점이 있다고 가정합니다. 이제 "부메랑"은 i와 j 사이의 거리가 i와 k 사이의 거리와 같도록 (i, j, k)와 같은 점의 튜플입니다. 부메랑의 수를 찾아야 합니다.

따라서 입력이 [[0,0],[1,0],[2,0]]과 같으면 두 개의 부메랑이 [[1,0],[0,0]이므로 출력은 2가 됩니다. ,[2,0]] 및 [[1,0],[2,0],[0,0]].

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • counter_of_boomerangs :=0

  • 포인트 배열의 각 point_1에 대해

    • x1, y1 =point_1

    • distance_count_dict라는 지도 정의

    • 포인트 배열의 각 point_2에 대해

      • x2, y2 =point_2

      • diff_x :=x2 - x1

      • diff_y :=y2 - y1

      • dist :=diff_x^2 + diff_y^2

      • distance_count_dict[ dist ] :=distance_count_dict[ dist ] + 1

    • distance_count_dict의 각 d에 대해 -

      • n :=distance_count_dict[d]

      • counter_of_boomerangs :=counter_of_boomerangs + n * (n - 1)

  • counter_of_boomerangs를 반환

예시

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

from collections import defaultdict
class Solution:
   def numberOfBoomerangs(self, points):
      counter_of_boomerangs = 0
      for point_1 in points:
         x1, y1 = point_1
         distance_count_dict = defaultdict( int )
         for point_2 in points:
            x2, y2 = point_2
            diff_x = x2-x1
            diff_y = y2-y1
            dist = diff_x ** 2 + diff_y ** 2
            distance_count_dict[ dist ] += 1
         for d in distance_count_dict:
            n = distance_count_dict[d]
            counter_of_boomerangs += n * (n-1)
      return counter_of_boomerangs

ob = Solution()
print(ob.numberOfBoomerangs([[0,0],[1,0],[2,0]]))

입력

[[0,0],[1,0],[2,0]]

출력

0