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

C++에서 주어진 N개의 삼각형 중 고유한 삼각형의 수 찾기

<시간/>

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