개?발/Backjoon

Backjoon1002 터렛

YUEIC 2025. 5. 26. 17:50

1. 같은 거리에서 관측되려면 측정한 지점을 기준으로 원을 그려 겹치는 부분을 생각하면 됨.

2. 두 원이 겹치는 경우는 여섯가지가 존재 함. (1개의 점 외접, 1개의 점 내접, 두개의 접점, 서로 관련 없음, 한 원이 다른 원 안에 접점없이 존재, 완벽하게 일치하게 겹침)

3. 따라서 각 경우에 맞게 정답을 출력하면 됨. 정답의 범위는 -1(무한대),0, 1, 2 네 가지.

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int t = Integer.parseInt(br.readLine());

        for(int tc = 0 ; tc < t ; tc++){
            StringTokenizer st1 = new StringTokenizer(br.readLine());
            //1번 지점의 좌표값
            int x1 = Integer.parseInt(st1.nextToken());
            int y1 = Integer.parseInt(st1.nextToken());
            //1번 지점에서의 반지름 값
            int r1 = Integer.parseInt(st1.nextToken());
            //2번 지점의 좌표 값
            int x2 = Integer.parseInt(st1.nextToken());
            int y2 = Integer.parseInt(st1.nextToken());
            //2번 지점에서의 반지름 값
            int r2 = Integer.parseInt(st1.nextToken());

            //1번 지점과 2번 지점의 거리를 측정
            double dist = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));

            //좌표의 x값, y값, 반지름 값이 모두 동일하면 모든 원주 위에 있을 수 있으므로 -1
            if (x1 == x2 && y1 == y2 && r1 == r2) {
                bw.write("-1\n");
            } else {
                //두 반지름의 합
                double sum = r1 + r2;
                //두 반지름의 차의 절대값
                double diff = Math.abs(r1 - r2);
                //반지름의 합보다 거리가 멀면 두 원은 떨어져 있으므로 교차점이 없음.
                if (dist > sum) {
                    bw.write("0\n");
                //반비름의 합과 거리가 동일하면 두 원은 한 점만 외접하고 있음.
                } else if (dist == sum) {
                    bw.write("1\n");
                //반지름의 합이 차의 절대값보다 크면 2점을 겹치고 있음.
                } else if (dist > diff) {
                    bw.write("2\n");
                //반지름의 합과 차의 절대값이 동일하면 한 점을 내접하고 있음.
                } else if (dist == diff) {
                    bw.write("1\n");
                //모두 만족하지 않는다면 원 안에서 다른 원이 인접하고 있지 않음.
                } else {
                    bw.write("0\n");
                }
            }
        }

        bw.flush();
        bw.close();
    }
}

 

'개?발 > Backjoon' 카테고리의 다른 글

Backjoon 2292 벌집  (1) 2025.06.05
Backjoon 2839 설탕배달  (0) 2025.05.26