C++:: 프로그래머스 <시소 짝꿍>

jahlee·2023년 3월 11일
0

프로그래머스_Lv.2

목록 보기
8/106
post-thumbnail

처음에 이중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;
}

0개의 댓글