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
반응형
'프로그래밍 > 코딩테스트' 카테고리의 다른 글
코딩테스트 : 호텔 대실 (1) | 2025.03.02 |
---|---|
코딩테스트 : 전력망을 둘로 나누기 (0) | 2025.03.01 |
코딩테스트 : 마법의 엘리베이터 (0) | 2025.03.01 |
코딩테스트 : 삼각 달팽이 (0) | 2025.02.09 |
코딩테스트 : 큰 수 만들기 (0) | 2025.02.09 |