

굳이 거리 r로 주어진 것에 주목해야한다.
한 점에서 같은 거리에 있는 점들의 집합 = 원이다.
따라서 이 문제는 두 원의 중심이 주어지고, 각각의 반지름 r1, r2가 주어졌을때 교점의 수를 구하는 문제이다.
중간에 생각대로 풀다가 틀렸길래, 구글링으로 두 원의 교점의 갯수를 찾아 풀었다. 나는 여길 참조했다.
두 원의 위치관계, 내접, 외접
위치관계 또 나오네요. 이번에는 두 원의 위치관계에요. 위치관계 마지막이니까 정신 바짝 차리고 따라오세요. 원과 직선의 위치관계, 원의 할선과 접선, 접점에서 했던 것처럼 두 원이 어떤 관
mathbang.net
나는 동심원의 경우를 제대로 고려하지 않았다.
배열의 크기는 6으로 고정되있어서, 반복문은 별 제한없이 써도된다.
또, if문으로 걸러낼 때 어떤 경우의 수부터 걸러낼지 잘 생각해봐야한다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int t = Integer.parseInt(br.readLine());
for (int i=0; i<t; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int x1 = Integer.parseInt(st.nextToken());
int y1 = Integer.parseInt(st.nextToken());
int r1 = Integer.parseInt(st.nextToken());
int x2 = Integer.parseInt(st.nextToken());
int y2 = Integer.parseInt(st.nextToken());
int r2 = Integer.parseInt(st.nextToken());
// 입력값 받기
double d = Math.sqrt(Math.pow(x1-x2, 2) + Math.pow(y1-y2, 2));
// 두 직원 사이의 거리 (=두 원의 중심 사이의 거리)
int rPlus = r1+r2;
double rMinus = Math.abs(r1-r2);
if (d==0) {
if (r1==r2) {
System.out.println(-1);
} else {
System.out.println(0);
}
} else {
if (d==rPlus || d==rMinus) {
System.out.println(1);
} else if (d>rPlus || d<rMinus) {
System.out.println(0);
} else if (d>rMinus && d<rPlus) {
System.out.println(2);
}
}
}
}
}'백준 문제풀이' 카테고리의 다른 글
| 1358. 하키 (자바, Java) (0) | 2022.10.24 |
|---|---|
| 1004. 어린왕자 (자바, Java) (0) | 2022.10.24 |
| 2477. 참외밭 (자바, Java) (0) | 2022.10.10 |
| 1934. 최소공배수 (자바, Java) (0) | 2022.10.10 |
| 2609. 최대공약수와 최소공배수 (자바, Java) (0) | 2022.10.10 |