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

Python에서 쌍의 요소가 다른 행에 있도록 주어진 합계로 쌍 찾기


고유한 요소와 합계로 구성된 행렬이 있다고 가정합니다. 합이 주어진 합과 같은 행렬에서 모든 쌍을 찾아야 합니다. 여기에서 쌍의 각 요소는 다른 행에서 가져옵니다.

따라서 입력이 다음과 같으면 -

2 4 3 5
6 9 8 7
10 11 14 12
13 1 15 16

sum =13이면 출력은 [(2, 11), (4, 9), (3, 10), (5, 8), (12, 1)]

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

  • res :=새 목록

  • n :=행렬의 크기

  • 0에서 n 사이의 i에 대해 수행

    • 목록 행렬 정렬[i]

  • 범위 0에서 n - 1에 있는 i에 대해 수행

    • i + 1에서 n 사이의 j에 대해 수행

      • 낮음 :=0, 높음 :=n - 1

      • 낮음 =0인 동안 수행

        • (matrix[i, low] + matrix[j, high])가 합과 같으면

          • pair :=(matrix[i, low],matrix[j, high])

            를 사용하여 쌍을 만듭니다.
          • res의 끝에 쌍 삽입

          • 낮음 :=낮음 + 1

          • 높음 :=높음 - 1

        • 그렇지 않으면

          • if (matrix[i][low] + matrix[j][high])

            • 낮음 :=낮음 + 1

          • 그렇지 않으면

            • 높음 :=높음 - 1

  • 반환 해상도

예제(파이썬)

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

MAX = 100
def sum_pair(matrix, sum):
   res = []
   n = len(matrix)
   for i in range(n):
   matrix[i].sort()
   for i in range(n - 1):
      for j in range(i + 1, n):
         low = 0
         high = n - 1
         while (low < n and high >= 0):
            if ((matrix[i][low] + matrix[j][high]) == sum):
               pair = (matrix[i][low],matrix[j][high])
               res.append(pair)
               low += 1
               high -= 1
         else:
         if ((matrix[i][low] + matrix[j][high]) < sum):
            low += 1
         else:
            high -= 1
   return res

sum = 13
matrix = [
   [2, 4, 3, 5],
   [6, 9, 8, 7],
   [10, 11, 14, 12],
   [13, 1, 15, 16]]
print(sum_pair(matrix, sum))

입력

[[2, 4, 3, 5],
[6, 9, 8, 7],
[10, 11, 14, 12],
[13, 1, 15, 16]]
sum = 13

출력

[(4, 9), (5, 8), (2, 11), (3, 10), (12, 1)]