터렛


백준 [1002] 터렛

문제보기
Alt text

풀이

조규현과 백승환의 위치를 각 원점으로 두고, 류재명과의 거리를 반지름으로 고려하여 두 개의 원으로 생각한다. 두 원이 접하는 점이 몇 개인지를 파악하여 출력한다

소스코드

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int T = sc.nextInt();
        for (int tc = 0; tc < T; tc++) {
            // 조규현과 류재명 : A
            int x1 = sc.nextInt();
            int y1 = sc.nextInt();
            int r1 = sc.nextInt();

            // 백승환과 류재명 : B
            int x2 = sc.nextInt();
            int y2 = sc.nextInt();
            int r2 = sc.nextInt();

            double d = Math.sqrt(((x2 - x1) * (x2 - x1)) + ((y2 - y1) * (y2 - y1)));

            int marineLocCnt = findMarineLocation(r1, r2, d);
            System.out.println(marineLocCnt);
        }
    }

    // 두 점에서 만나는 경우 : |r1-r2| < d < |r1+r2|
    // 한 점에서 만나는 경우 : |r1-r2| = d or |r1+r2| = d
    // 만나지  않는경우 : |r1-r2| > d  or |r1+r2| < d
    // 두 원이 같은 경우 : d = 0
    private static int findMarineLocation(int r1, int r2, double d) {
        if (d == 0 && r1 == r2) {
            return -1;
        }

        double diff = Math.abs(r1 - r2);
        double sum = Math.abs(r1 + r2);

        if (diff > d || sum < d) {
            return 0;
        }
        if (diff == d || sum == d) {
            return 1;
        }
        if (diff < d && d < sum) {
            return 2;
        }

        return 3; // error
    }
}