728x90
1002번: 터렛
각 테스트 케이스마다 류재명이 있을 수 있는 위치의 수를 출력한다. 만약 류재명이 있을 수 있는 위치의 개수가 무한대일 경우에는 $-1$ 출력한다.
www.acmicpc.net
문제에서 두 좌표와 각각의 거리가 주어져 원을 그릴 수 있다. 그 원이 바로 문제에서 말하는 사람이 있을 수 있는 위치이다.
- 사람이 있을 수 있는 위치가 무한대인 경우는 두 좌표가 일치하고, 원의 크기가 같을 때
- 사람이 있을 수 있는 위치가 한 곳인 경우는 두 원이 내접, 외접하는 경우이다.
- 두 원의 반지름 차 == 두 좌표의 거리 or 두 원의 반지름 합 == 두 좌표의 거리
- 사람이 있을 수 있는 위치가 두 곳인 경우는 두 원이 두 점에서 만나는 경우이다.
- 두 원의 반지름 차 < 두 좌표의 거리 < 두 원의 반지름 합
- 그 외는 두 원이 만나지 않기 때문에 사람이 있을 수 있는 위치가 없다.
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
'Algorithm > Problem Solving' 카테고리의 다른 글
[BOJ] 2110번 공유기 설치 - JAVA(자바) (0) | 2023.09.14 |
---|---|
[BOJ] 1654번 랜선 자르기 - JAVA(자바) (0) | 2023.09.12 |
[BOJ] 2805번 나무 자르기 - JAVA(자바) (0) | 2023.09.12 |
[BOJ] 10825번 국영수 - JAVA(자바) (0) | 2023.08.07 |
[BOJ] 2960번 에라토스테네스의 체 - JAVA(자바) (0) | 2023.08.03 |