원의 교접을 떠올리면 쉽게 풀 수 있는 문제
swap
함수를 따로 짰다.d
, 두 원의 반지름을 더해준 값은 plus
, 빼준 값은 minus
이다.d==0 && r1==r2
) 무한대로 존재할 수 있으므로 -1
d==plus
), 내접하는 경우(d==minus
)가 있다.d
는 minus
보다 크고, plus
보다 작아야 한다.d==0
)이거나, d
가 plus
보다 크고, minus
보다 작아야 한다.#include <iostream>
#include <cmath>
using namespace std;
void swap(int &x1, int &y1, int &r1, int &x2, int &y2, int &r2)
{
if (r1 < r2) // r1이 반지름이 큰 원이 오게
{
int tmp = x1;
x1 = x2;
x2 = tmp;
tmp = y1;
y1 = y2;
y2 = tmp;
tmp = r1;
r1 = r2;
r2 = tmp;
}
}
int main(void)
{
int t;
cin >> t;
for (int i = 0; i < t; i++)
{
int x1, y1, r1;
int x2, y2, r2;
cin >> x1 >> y1 >> r1 >> x2 >> y2 >> r2;
swap(x1, y1, r1, x2, y2, r2);
double d = sqrt(pow(x1 - x2, 2) + pow(y1 - y2, 2));
int minus = r1 - r2;
int plus = r1 + r2;
if (d == 0 && r1 == r2) cout << -1 << endl;
else if (d == minus || d == plus) cout << 1 << endl;
else if (minus < d && d < plus) cout << 2 << endl;
else if (d == 0 || d > plus || d < minus) cout << 0 << endl;
}
return 0;
}