https://www.acmicpc.net/problem/1002
[풀이]
- 거리를 구하는 공식 및 두 원이 서로 접하는 경우를 구분하여 푸는 문제였습니다.
- 반지름이 r1인 원과 r2인 원의 접점의 개수를 찾아야 한다.
- 두 원의 중심이 같고 반지름도 같을 경우 -> 무한
- 두 점 사이의 거리가 두 반지름의 합보다 큰 경우 -> 0
- 한 원이 다른 원 안에 있을 때 안에 있는 원의 반지름이 밖에 있는 원보다 반지름이 작을 경우 -> 0
- 두 원이 내접하는 경우 -> 1
- 두 원이 외접하는 경우 -> 1
[코드]
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static int solve(int x1, int y1, int r1, int x2, int y2, int r2) {
int dis = (int) (Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));
if (x1 == x2 && y1 == y2 && r1 == r2)
return -1;
else if (dis > Math.pow(r1 + r2, 2))
return 0;
else if (dis < Math.pow(r2 - r1, 2))
return 0;
else if (dis == Math.pow(r2 - r1, 2))
return 1;
else if (dis == Math.pow(r1 + r2, 2))
return 1;
else
return 2;
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
while (T-- > 0) {
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());
int answer = solve(x1, y1, r1, x2, y2, r2);
System.out.println(answer);
}
}
}
'Algorithm > 백준' 카테고리의 다른 글
백준 2468번 : 안전영역(Java) (0) | 2021.10.24 |
---|---|
백준 10819번 : 차이를 최대로(Java) (0) | 2021.10.19 |
백준 16198번 : 에너지 모으기 (Java) (0) | 2021.10.12 |
백준 10026번 : 적록색약 (Java) (0) | 2021.10.10 |
백준 2002번 : 추월 (Java) (0) | 2021.10.08 |