풀이 방법 : 수학
각 두 개의 터렛의 좌표와 해당 좌표에서 마린까지의 거리가 나와있으니 두 개의 원을 그릴 수 있다.
그 두 개의 관계에 따라 원이 만나는 지점의 갯수를 생각해주면 마린이 있을 수 있는 위치의 갯수를 알 수 있다.
아예 안만나는 경우 = 0개
외접 혹은 내접 = 1개
두 점에서 만나는 경우 = 2개
두 원이 정확히 일치하는 경우 = 무한 개 ( -1 출력)
#include <iostream>
using namespace std;
int main()
{
cin.tie(nullptr);
cout.tie(nullptr);
ios::sync_with_stdio(false);
int T;
cin >> T;
while (T > 0)
{
--T;
int x1, y1, r1;
int x2, y2, r2;
cin >> x1 >> y1 >> r1;
cin >> x2 >> y2 >> r2;
int DistX = (x2 - x1) * (x2 - x1);
int DistY = (y2 - y1) * (y2 - y1);
int Dist = DistX + DistY;
int RadiusCond1 = (r1 + r2) * (r1 + r2);
int RadiusCond2 = (r1 - r2) * (r1 - r2);
if (Dist == 0)
{
if (r1 == r2)
cout << -1 << '\n';
else
cout << 0 << '\n';
continue;
}
if (Dist < RadiusCond1)
{
if (Dist == RadiusCond2)
{
cout << 1 << '\n';
}
else if (Dist < RadiusCond2)
{
cout << 0 << '\n';
}
else
{
cout << 2 << '\n';
}
}
else if (Dist == RadiusCond1)
{
cout << 1 << '\n';
}
else if (Dist > RadiusCond1)
{
cout << 0 << '\n';
}
}
}
한 원이 다른 원 안에 있는 경우를 생각 안해서 생각보다 오래 헤매서 너무 아쉬운 문제