첫번째 제출한 답
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int t = sc.nextInt();
sc.nextLine();
for (int i = 0; i < t; i++) {
String input = sc.nextLine();
int x1 = Integer.parseInt(input.split(" ")[0]);
int y1 = Integer.parseInt(input.split(" ")[1]);
int r1 = Integer.parseInt(input.split(" ")[2]);
int x2 = Integer.parseInt(input.split(" ")[3]);
int y2 = Integer.parseInt(input.split(" ")[4]);
int r2 = Integer.parseInt(input.split(" ")[5]);
//두 좌표 사이의 거리
double dist = Math.sqrt((Math.pow(x1-x2,2)+Math.pow(y1-y2, 2)));
if(dist>Math.abs(r1-r2)&&dist<r1+r2) {
//두점에서 만나는경우
System.out.println(2);
} else if(dist==r1+r2||dist==Math.abs(r1-r2)) {
//외접, 내접
System.out.println(1);
} else if(dist>r1+r2||dist<Math.abs(r1-r2)) {
// 만나지 않는경우
System.out.println(0);
} else if(dist == 0) {
//좌표가 일치하는경우
if(r1!=r2) {
// 반지름길이가 다른경우
System.out.println(0);
} else {
// 반지름 길이가 같은경우 (같은원일경우)
System.out.println(-1);
}
}
}
}
}
접근방식 -> 각 사람의 좌표에서 계산한 적의 위치들을 선으로 연결했을때 반지름이 각각 r1,r2인 원이 되고 즉 적이 있을수 있는 위치는 두 원이 만나는 점의 수이다. 즉 두원이 만나는 조건에 따라 값을 나눠서 출력한다.
결과 -> 오답
문제점 -> 테스트 결과 같은 원이 입력으로 들어왔을때 1이 출력되었다
원인 -> 같은 원이 입력으로 들어왔을때 Math.abs(r1-r2)가 0이기 때문에 첫번째 else if문을 타게 되어 1이 출력되었다.
해결방법 -> 첫번째 else if 문 안에 조건을 추가한다.
두번째 제출한답
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int t = sc.nextInt();
sc.nextLine();
for (int i = 0; i < t; i++) {
String input = sc.nextLine();
int x1 = Integer.parseInt(input.split(" ")[0]);
int y1 = Integer.parseInt(input.split(" ")[1]);
int r1 = Integer.parseInt(input.split(" ")[2]);
int x2 = Integer.parseInt(input.split(" ")[3]);
int y2 = Integer.parseInt(input.split(" ")[4]);
int r2 = Integer.parseInt(input.split(" ")[5]);
//두 좌표 사이의 거리
double dist = Math.sqrt((Math.pow(x1-x2,2)+Math.pow(y1-y2, 2)));
if(dist>Math.abs(r1-r2)&&dist<r1+r2) {
//두점에서 만나는경우
System.out.println(2);
} else if(dist==r1+r2||dist==Math.abs(r1-r2)) {
if(dist!=0) {
//외접, 내접
System.out.println(1);
} else {
//같은 원일경우
System.out.println(-1);
}
} else if(dist>r1+r2||dist<Math.abs(r1-r2)) {
// 만나지 않는경우
System.out.println(0);
} else if(dist == 0) {
//좌표가 일치하고 반지름 길이가 다를경우
System.out.println(0);
}
}
}
}
결과-> 정답