포스트

[ 프로그래머스 ] 시소 짝꿍

문제


https://school.programmers.co.kr/learn/courses/30/lessons/152996

풀이


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <iostream>
#include <string>
#include <vector>
#include <string>
#include <stack>
#include <cmath>
#include <algorithm> 
#include <map>

using namespace std;

long long solution(vector<int> weights)
{
    long long answer = 0;

    // 거리 2,3,4 에 2명을 배치, 균형을 이루는 경우(무게와 거리 곱이 같은 경우)
    // 제한사항에 weights 범위가 넓으므로, 완전탐색으로는 시간 초과 발생

    sort(weights.begin(), weights.end(), greater<int>());

    for (int i = 0; i < weights.size() - 1; i++)
    {
        for (int j = i + 1; j < weights.size(); j++)
        {
            // 다른 수의 4배가 비교수의 2배보다 작을 경우, 균형을 이루는 경우의 수가 없다.
            if (weights[i] * 2 > weights[j] * 4) break;

            // 2*2, 3*3, 4*4 모두 같으므로, 하나만
            if (weights[i] * 2 == weights[j] * 2) answer++;

            // 같은 거리를 제외한 경우의 수
            else if (weights[i] * 2 == weights[j] * 3) answer++;
            else if (weights[i] * 2 == weights[j] * 4) answer++;
            else if (weights[i] * 3 == weights[j] * 4) answer++;
        }
    }

    return answer;
}
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.