처음에 이중for문이 안되는 줄알고 다음과 같이 풀었다.
또한 1,2,3,4 미터에 앉을 수 있다고 착각하여 시간을 버렸다.
이에 대한 예시로 100 100 끼리는 짝꿍이지만 100 300은 짝꿍이 아닌것이다.
#include <string>
#include <vector>
#include <algorithm>
#include <map>
using namespace std;
bool is_duo(int a, int b)// 짝꿍인지
{
int A[] = {a*2,a*3,a*4};
int B[] = {b*2,b*3,b*4};
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
if(A[i] == B[j]) return true;
return false;
}
long long solution(vector<int> weights)
{
long long answer = 0;
map<int,long long> m;
int n = weights.size();
for(int i=0;i<n;i++) m[weights[i]]++;//중복 체크
sort(weights.begin(), weights.end());
weights.erase(unique(weights.begin(), weights.end()), weights.end());//중복 삭제
n = weights.size();
for(int i=0;i<n;i++)
for(int j=i+1;j<n;j++)
if(is_duo(weights[i], weights[j])) answer += m[weights[i]]*m[weights[j]];
// 서로의 중복 개수 곱만큼 더해준다
for(auto c : m) answer += (c.second*(c.second-1))/2;
// 같은 몸무게 끼리
return answer;
}