터렛
백준 [1002] 터렛
풀이
조규현과 백승환의 위치를 각 원점으로 두고, 류재명과의 거리를 반지름으로 고려하여 두 개의 원으로 생각한다. 두 원이 접하는 점이 몇 개인지를 파악하여 출력한다
소스코드
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
}
}