이 문제에서는 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