[BOJ] 1002. 터렛
15 Apr 2026
Reading time ~1 minute
풀이
import java.util.Scanner;
public class Main {
public static final int INF = -1;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
for(int t = 0; t < T; t++) {
int answer = 0;
int x1 = sc.nextInt();
int y1 = sc.nextInt();
int r1 = sc.nextInt();
int x2 = sc.nextInt();
int y2 = sc.nextInt();
int r2 = sc.nextInt();;
int r_max = Math.max(r1, r2);
int r_min = Math.min(r1, r2);
int DISTANCE_BETWEEN_CENTER = (x2-x1)*(x2-x1)+(y2-y1)*(y2-y1);
int SUM_OF_RADIUS = (r1+r2)*(r1+r2);
if(isCircleSame(x1,y1,r1,x2,y2,r2)) {
System.out.println(INF);
continue;
}
if(isCircleInside(r_max, r_min, DISTANCE_BETWEEN_CENTER)) {
System.out.println(0);
continue;
}
if(isStickyCircleInside(r_max, r_min, DISTANCE_BETWEEN_CENTER)) {
System.out.println(1);
continue;
}
if(DISTANCE_BETWEEN_CENTER < SUM_OF_RADIUS) {
System.out.println(2);
} else if(DISTANCE_BETWEEN_CENTER == SUM_OF_RADIUS) {
System.out.println(1);
} else {
System.out.println(0);
}
}
}
// 두 원이 같을 때(무한대)
public static boolean isCircleSame(int x1, int y1, int r1, int x2, int y2, int r2) {
if(x1 == x2 && y1 == y2 && r1 == r2) return true;
return false;
}
// d + r_min < r_max;
// d < r_max - r_min;
// 한 원 안에 다른 원이 완전히 들어갔을 때(0)
public static boolean isCircleInside(int r_max, int r_min, int DISTANCE_BETWEEN_CENTER) {
if(DISTANCE_BETWEEN_CENTER < r_max*r_max -2*r_max*r_min + r_min*r_min) return true;
return false;
}
// 내접(1)
public static boolean isStickyCircleInside(int r_max, int r_min, int DISTANCE_BETWEEN_CENTER) {
if(DISTANCE_BETWEEN_CENTER == r_max*r_max -2*r_max*r_min + r_min*r_min) return true;
return false;
}
}