우리는 N x M 차수의 행렬이 하나 있고 제품 K가 있습니다. 작업은 주어진 제품과의 쌍이 행렬에 존재하는지 여부를 확인하는 것입니다.
행렬이 아래와 같다고 가정 -
| 1 | 2 | 3 | 4 |
| 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 |
이제 K가 42이면 (6, 7)과 같은 쌍이 있습니다.
이 문제를 해결하기 위해 해싱을 사용합니다. 행렬의 모든 요소를 가져와서 해시 테이블을 생성합니다. 우리는 행렬 순회를 시작할 것이고, 순회하는 동안 행렬의 현재 요소가 주어진 곱으로 나눌 수 있는지 확인하고 곱 K를 현재 요소로 나눌 때 배당금도 해시 테이블에 표시됩니다. 따라서 필수 조건은 다음과 같습니다. -
(k mod matrix[i, n])은 거짓이고 해시 테이블에는 k/matrix[i, j]
가 있습니다.존재하면 true를 반환하고, 그렇지 않으면 현재 요소를 해시 테이블에 삽입합니다.
쌍을 찾지 못하면 false를 반환합니다.
예
#include <iostream>
#include <unordered_set>
#define N 4
#define M 4
using namespace std;
bool isPairPresent(int matrix[N][M], int K) {
unordered_set<int> s;
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
if ((K % matrix[i][j] == 0) && (s.find(K / matrix[i][j]) != s.end())) {
return true;
} else {
s.insert(matrix[i][j]);
}
}
}
return false;
}
int main() {
int matrix[N][M] = {{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12},
{13, 14, 15, 16}};
int k = 42;
if (isPairPresent(matrix, k) == false)
cout << "NO PAIR EXIST";
else
cout << "Pair is present";
} 출력
Pair is present