프로그래밍/코딩테스트

코딩테스트 : 시소 짝꿍

백사니 2025. 3. 1. 22:16
728x90
반응형

해당 문제는 시소의 균형을 이루는 두 사람의 몸무게 관계를 파악하는 문제로, 주어진 몸무게 목록에서 짝꿍이 될 수 있는 쌍의 개수를 구하는 문제이다.

놀이공원에 있는 시소는 중심으로부터 2m, 3m, 4m 거리에 좌석이 있으며, 두 사람이 시소에 마주 보고 탈 때, 시소가 평형을 이루려면 각 사람이 시소에 가하는 토크의 크기가 같아야한다. 즉, 탑승한 사람의 몸무게와 시소 축과의 거리의 곱이 양쪽 모두 같아야 한다.

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

long long solution(vector<int> weights) {
    long long answer = 0; // 시소 짝꿍 쌍의 개수를 저장할 변수 초기화
    
    sort(weights.begin(), weights.end()); // 몸무게 목록을 오름차순으로 정렬

    // 이중 반복문을 사용하여 가능한 모든 몸무게 쌍을 비교
    for(int i = 0; i < weights.size(); i++)
    {
        for(int j = i + 1; j < weights.size(); j++)
        {
            // 두 사람의 몸무게가 같은 경우
            if(weights[i] == weights[j])
            {
                answer++; // 시소 짝꿍 쌍의 개수 증가
            }
            // 몸무게 비율이 2:3인 경우 (2m, 3m 좌석)
            else if(weights[i] * 3 == weights[j] * 2)
            {
                answer++; // 시소 짝꿍 쌍의 개수 증가
            }
            // 몸무게 비율이 3:4인 경우 (3m, 4m 좌석)
            else if(weights[i] * 4 == weights[j] * 3)
            {
                answer++; // 시소 짝꿍 쌍의 개수 증가
            }
            // 몸무게 비율이 1:2인 경우 (2m, 4m 좌석)
            else if(weights[i] * 2 == weights[j])
            {
                answer++; // 시소 짝꿍 쌍의 개수 증가
            }
            // 현재 몸무게의 2배를 초과하는 몸무게가 나오면 더 이상 비교할 필요가 없음
            else if(weights[i] * 2 < weights[j])
                break; // 내부 반복문 종료
        }
    }
    
    return answer; // 시소 짝꿍 쌍의 총 개수 반환
}

728x90
반응형