main
[백준-1002번/Java] 터렛 본문
https://www.acmicpc.net/problem/1002
* 두 원의 접점의 갯수를 구하는 문제이다.
* 외부 / 내부의 경우를 고려해야 한다.
원의 접점
|
두 점에서 만남
|
한 점에서 만남
|
만나지 않는 경우
|
무수히 많음
|
||
외접
|
내접
|
외부에서
|
내부에서
|
|||
두 중점 거리
< 반지름의 합 |
두 중점 거리
= 반지름의 합 |
두 중점의 거리
= 반지름의 차이 |
두 중점의 거리
> 반지름의 합 |
두 중점의 거리
< 반지름의 차이 |
두 중점의 거리= 0
&& 두 반지름이 같은 경우 |
|
d < r1 + r2
|
d = r1 + r2
|
d = |r1 - r2|
|
d > r1 + r2
|
d < |r1 - r2|
|
d = 0 && r1 = r2
|
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
Scanner in = new Scanner(System.in);
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int T = Integer.parseInt(br.readLine());
for (int i = 0; i < T; i++) {
StringTokenizer stk = new StringTokenizer(br.readLine(), " ");
int x1 = Integer.parseInt(stk.nextToken());
int y1 = Integer.parseInt(stk.nextToken());
int r1 = Integer.parseInt(stk.nextToken());
int x2 = Integer.parseInt(stk.nextToken());
int y2 = Integer.parseInt(stk.nextToken());
int r2 = Integer.parseInt(stk.nextToken());
double d = Math.sqrt(Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2));
if (d == 0 && r1 == r2) {
// 같은 원인 경우 (무수히 많은 점에서 만난다.)
System.out.println(-1);
} else if (d < Math.abs(r1 - r2)) {
// 원의 내부에 있으면서 안 만나는 경우
System.out.println(0);
} else if (d > r1 + r2) {
// 원의 외부에 있으면서 안 만나는 경우
System.out.println(0);
} else if (d == Math.abs(r1 - r2)) {
// 원의 내부에 있으면서 한 점에서 만나는 경우
System.out.println(1);
} else if (d == r1 + r2) {
// 원의 외부에 있으면서 한 점에서 만나는 경우
System.out.println(1);
} else {
System.out.println(2);
}
}
}
}
[참고자료]
728x90
'Algorithm' 카테고리의 다른 글
[Array-10/Java] 봉우리 (0) | 2022.11.25 |
---|---|
[백준-3036번/Java] 링 (0) | 2022.11.23 |
[백준-3053번/Java] 택시 기하학 (0) | 2022.11.22 |
[백준-2477번/Java] 참외밭 (0) | 2022.11.22 |
[백준-11478번/Java] 서로 다른 부분 문자열의 개수 (0) | 2022.11.22 |
Comments