Algorithm/Problem Solving

[BOJ] 1002번 터렛 - JAVA(자바)

gangintheremark 2023. 8. 3. 23:02
728x90
 

1002번: 터렛

각 테스트 케이스마다 류재명이 있을 수 있는 위치의 수를 출력한다. 만약 류재명이 있을 수 있는 위치의 개수가 무한대일 경우에는 $-1$ 출력한다.

www.acmicpc.net

문제에서 두 좌표와 각각의 거리가 주어져 원을 그릴 수 있다. 그 이 바로 문제에서 말하는 사람이 있을 수 있는 위치이다. 

  1. 사람이 있을 수 있는 위치가 무한대인 경우는 두 좌표가 일치하고, 원의 크기가 같을 때
  2. 사람이 있을 수 있는 위치가 한 곳인 경우는 두 원이 내접, 외접하는 경우이다.
    • 두 원의 반지름 차 == 두 좌표의 거리 or 두 원의 반지름 합 == 두 좌표의 거리
  3. 사람이 있을 수 있는 위치가 두 곳인 경우는 두 원이 두 점에서 만나는 경우이다.
    • 두 원의 반지름 차 < 두 좌표의 거리 < 두 원의 반지름 합
  4. 그 외는 두 원이 만나지 않기 때문에 사람이 있을 수 있는 위치가 없다.
import java.util.*;

class Main {

    public static void main(String[] args)  {

        Scanner s = new Scanner(System.in);

        int T= s.nextInt();
        for (int i = 0; i < T; i++) {

            int x1 = s.nextInt();
            int y1 = s.nextInt();
            int r1 = s.nextInt();

            int x2 = s.nextInt();
            int y2 = s.nextInt();
            int r2 = s.nextInt();

            double dist = Math.sqrt(Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2)); // 두 점의 거리
            double diff = Math.abs(r1 - r2); // 반지름 차
            double sum = r1 + r2; // 반지름 합

            int ans = 0;

            // 원의 일치하면 겹치는 위치의 개수는 무한대
            if (dist == 0 && diff == 0) {
                ans = -1;

                // 내접하거나 외접하면 겹치는 위치는 1곳
            } else if (dist == diff || dist == sum) {
                ans = 1;

                // 두 점 사이의 거리가 반지름의 합보다 작고, 반지름의 차보다 크면 겹치는 위치 2곳 
            } else if (dist > diff  && dist < sum) {
                ans = 2;
            }

            System.out.println(ans);
        }
    }
}

 

728x90