백준 1002

야민·2023년 3월 18일
0

백준

목록 보기
1/8

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와 두 원의 반지름을 이용하여 각 경우의 교점 개수를 계산합니다. 특히, 두 원이 일치하는 경우, 두 원이 만나지 않는 경우, 두 원이 내접하거나 외접하는 경우 등을 구별하는 것이 중요합니다.

0개의 댓글