Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++를 사용하여 행렬에서 주어진 합으로 쌍 찾기

<시간/>

이 기사에서는 주어진 행렬에서 주어진 합을 갖는 쌍을 찾는 프로그램에 대해 논의할 것입니다. 예를 들어 -

Input : matrix[n][m] = { 
   { 4, 6, 4, 65 }, 
   { 56, 1, 12, 32 },
   { 4, 5, 6, 44 },
   { 13, 9, 11, 25 } 
}, SUM = 20

Output : Pair exists.
Explanation : Sum = 20 is equal to the sum of numbers 9 and 11 which exists in the matrix.

Input : matrix[n][m] = { 
   { 5, 7, 3, 45 },  
   { 63, 5, 3, 7 },  
   { 11, 6, 9, 5 },
   { 8, 6, 14, 15 } 
}, SUM = 13
Output : Pair does not exist.
Explanation : No pair exists in the matrix whose sum is equal to 7.

해결책을 찾기 위한 접근 방식

이제 위의 문제를 해결하기 위한 두 가지 접근 방식을 설명하겠습니다.

무차별 대입 접근

주어진 행렬의 각 쌍을 고려하고 쌍의 합이 주어진 SUM과 같은지 확인하고 그렇다면 "Pair exist"를 인쇄합니다. 그렇지 않으면 "쌍이 존재하지 않습니다."를 인쇄하십시오. 이 접근 방식을 적용하는 것은 매우 간단하지만 시간 복잡도가 O((N*M)2)까지 증가합니다.

효율적인 접근

이 프로그램은 해시를 사용하여 모든 행렬 요소를 저장한 다음 행렬을 탐색하고 [ SUM &(인덱스 요소) ]의 차이가 동일한지 확인함으로써 효율적일 수 있습니다. 예인 경우 "Exist"를 인쇄하고 프로그램을 종료합니다. NO인 경우 인쇄를 순회한 후 "존재하지 않습니다."

예시

#include <bits/stdc++.h>
using namespace std;

#define n 4
#define m 4

int main() {
   int matrix[n][m] = { 
      { 5,7, 3,45 },
      { 63, 5, 3, 7 },
      { 11, 6, 9, 5 },
      { 8, 6, 14, 15 } 
   };

   int sum = 7;
   unordered_set<int> hash;

   for (int i = 0; i < n; i++) {
      for (int j = 0; j < m; j++) {
         if (hash.find(sum - matrix[i][j]) != hash.end()) {
            cout << "Pair exists." << endl;
            return 0;
         } else {
            hash.insert(matrix[i][j]);
         }
      }
   }

   cout << "Pair does not exist." << endl;
   return 0;
}

출력

Pair does not exist.

위 코드 설명

  • 2차원 배열을 선언하고 그 안에 요소를 저장합니다.
  • 배열을 탐색하여 if (sum - matrix[i][j]) !=hash.end()를 찾습니다.
  • 조건이 충족되면 "Pair exist"를 인쇄하고 기본 함수에서 반환합니다.
  • 그렇지 않으면 배열을 계속 탐색하고 마지막으로 " 쌍이 존재하지 않습니다."를 출력합니다.

결론

이 기사에서 우리는 행렬이나 2차원 배열에서 주어진 합을 가진 쌍을 찾는 것에 대해 논의했습니다. 우리는 이 문제를 해결하기 위한 Brute-force 접근법과 Efficient 접근법에 대해 논의했습니다. 우리는 이 문제를 해결하기 위해 C++ 프로그램에 대해 논의했습니다. 그러나 이 프로그램은 C, Java, Python 등과 같은 다른 언어로 작성할 수 있습니다. 이 기사가 도움이 되기를 바랍니다.