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

C++ 카드 한 벌의 X 종류

<시간/>

카드 한 벌이 있다고 가정하고 각 카드에는 정수가 기록되어 있습니다. 우리는 X>=2를 선택할 수 있는지 확인하여 전체 데크를 1개 이상의 카드 그룹으로 분할할 수 있는지 확인해야 합니다. 여기서 다음 조건이 충족됩니다. 각 그룹에는 정확히 X개의 카드가 있습니다. 각 그룹의 모든 카드는 동일한 번호를 갖습니다.

따라서 입력이 deck =[1,2,3,4,4,3,2,1]과 같으면 가능한 파티션이 [1,1],[2,2]이므로 출력은 True가 됩니다. [3,3],[4,4].

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • 하나의 지도 MP 정의
  • 덱의 모든 x에 대해
    • (mp[x] 1씩 증가)
  • mp
      의 모든 키-값 쌍 x에 대해
    • ans :=gcd of (an 및 x의 값)
  • as> 1이면 true를 반환하고, 그렇지 않으면 false를 반환

이해를 돕기 위해 다음 구현을 살펴보겠습니다. −

예시

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   bool hasGroupsSizeX(vector<int>& deck) {
      unordered_map<int, int> mp;
      int ans;
      for (auto x : deck)
         mp[x]++;
      for (auto x : mp)
         ans = __gcd(ans, x.second);
      return (ans > 1);
   }
};
main(){
   Solution ob;
   vector<int> v = {1,2,3,4,4,3,2,1};
   cout << (ob.hasGroupsSizeX(v));
}

입력

{1,2,3,4,4,3,2,1}

출력

1