1002번 문제는 "터렛" 문제로서, 두 원의 교점의 개수를 구하는 문제입니다.
아래는 C++로 작성한 해당 문제의 답안 예시입니다.
#include <iostream>
#include <cmath>
using namespace std;
int main() {
int T;
cin >> T;
while (T--) {
int x1, y1, r1, x2, y2, r2;
cin >> x1 >> y1 >> r1 >> x2 >> y2 >> r2;
double d = sqrt(pow(x2 - x1, 2) + pow(y2 - y1, 2));
// 두 원이 일치하는 경우
if (d == 0 && r1 == r2) {
cout << "-1\n";
continue;
}
// 두 원이 만나지 않는 경우
if (d > r1 + r2 || d < abs(r1 - r2)) {
cout << "0\n";
continue;
}
// 두 원이 내접하거나 외접하는 경우
if (d == r1 + r2 || d == abs(r1 - r2)) {
cout << "1\n";
continue;
}
// 그 외의 경우 (두 교점이 있는 경우)
cout << "2\n";
}
return 0;
}
위 코드는 입력으로 주어지는 테스트 케이스의 수 T와 x1, y1, r1, x2, y2, r2를 입력 받아 두 원의 교점의 개수를 출력하는 코드입니다.
두 원의 중심 사이의 거리 d를 계산한 뒤, d와 두 원의 반지름을 이용하여 각 경우의 교점 개수를 계산합니다. 특히, 두 원이 일치하는 경우, 두 원이 만나지 않는 경우, 두 원이 내접하거나 외접하는 경우 등을 구별하는 것이 중요합니다.