이 문제에서는 N개의 삼각형을 나타내는 크기가 N인 세 개의 배열 s1[] , s2[] 및 s3[]이 제공됩니다. 우리의 임무는 주어진 N개의 삼각형 중에서 고유한 삼각형의 수를 찾는 것입니다.
삼각형이 고유하려면 삼각형의 모든 면이 고유해야 합니다. 즉, 다른 삼각형은 면이 같아서는 안 됩니다.
문제를 이해하기 위해 예를 들어보겠습니다.
입력
s1[] = {1, 5, 3}
s2[] = {2, 3, 2}
s3[] = {4, 2, 5} 출력
1
설명
측면이 1 2 4인 삼각형이 독특합니다.
솔루션 접근 방식
문제에 대한 간단한 해결책은 고유한 삼각형의 수를 계산하는 것입니다.
이를 위해 먼저 각 삼각형의 변을 정렬한 다음 값이 고유한 경우 개수를 늘리면 지도에 저장합니다.
우리 솔루션의 작동을 설명하는 프로그램
예시
#include <bits/stdc++.h>
using namespace std;
int countUniqueTriangle(int a[], int b[], int c[], int n) {
vector<int> triSides[n];
map<vector<int>, int> m;
for (int i = 0; i < n; i++) {
triSides[i].push_back(a[i]);
triSides[i].push_back(b[i]);
triSides[i].push_back(c[i]);
sort(triSides[i].begin(), triSides[i].end());
m[triSides[i]] = m[triSides[i]] + 1;
}
map<vector<int>, int>::iterator itr;
int uniqueTriCount = 0;
for (itr = m.begin(); itr != m.end(); itr++) {
if (itr->second == 1)
if (itr->second == 1)
uniqueTriCount++;
}
return uniqueTriCount;
}
int main() {
int s1[] = { 1, 5 ,3 };
int s2[] = { 2, 3, 2 };
int s3[] = { 4, 2, 5 };
int N = sizeof(s1) / sizeof(s1);
cout<<"The number of unique triangles is "<<countUniqueTriangle(s1, s2, s3, N);
return 0;
} 출력
The number of unique triangles is 1