카드 한 벌이 있다고 가정하고 각 카드에는 정수가 기록되어 있습니다. 우리는 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