반응형
고등학교에 배운 원에 접점의 조건들을 나누는 문제였습니다.
나올 수 있는 결과 값을 기준으로 나누었습니다. ( -1, 0, 1, 2 )
변수는 두 점사의 거리(dotDistance), 반지름의 합(circleSum), 반지름의 차(circleSub)를 사용하였습니다.
1. 겹칠 때( -1 )
- 동심원이면서 같은 반지름일 경우 ( dotDistance == circleSub )
2. 안만날 때 ( 0 )
-
한 원이 다른원의 내부에 있지만 만나지 않는 경우 ( dotDistance < circleSub )
-
한 원이 다른원의 외부에 있지만 만나지 않는 경우 ( dotDistance > circleSum )
3. 한 점에서 만날 때 ( 1 )
-
내접 ( dotDistance == circleSub )
-
외접 ( dotDIstance == circleSum )
4. 두 점에서 만날 때 ( 2 ) // 나머지 전부
-
한 원이 다른원의 내부에서 두 점을 만날 때 ( dotDistance > circleSub )
-
한 원이 다른원의 외부에서 두 점을 만날 때 ( dotDistance < circleSum )
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 t=0; t<T; t++){
int x[]=new int[3];
int y[]=new int[3];
int r[]=new int[3]; // 1, 2인덱스를 사용하기 위해서 3개를 만들어 주었습니다.
for(int i=1; i<=2; i++){
x[i] = sc.nextInt();
y[i] = sc.nextInt();
r[i] = sc.nextInt();
}
double dotDistance = Math.sqrt(Math.pow(x[1]-x[2],2) + Math.pow(y[1]-y[2],2));
// 두 점사이의 거리
int circleSum = r[1]+r[2];
// 두 원의 반지름 합
int circleSub = Math.abs(r[1]-r[2]);
// 두 원의 반지름 차
if (dotDistance==0 && circleSub==0){ // 두 점사이의 거리가 0이고 반지름의 차가 0 -> 같은 원
System.out.println(-1);
}else if (dotDistance < circleSub || dotDistance > circleSum){ // 두 원이 안만날 때
System.out.println(0);
} else if(dotDistance == circleSub || dotDistance == circleSum) { // 한 점에서 만날 때 (내접, 외접)
System.out.println(1);
} else { //dotDistance > circleSub || dotDistance < circleSum 두 점에서 만날 때
System.out.println(2);
}
}
sc.close();
}
}
반응형
'Algorithm' 카테고리의 다른 글
백준 11729번 하노이 탑 이동 순서 [ Java ] (0) | 2019.12.27 |
---|---|
백준 2447번 별 찍기 - 10 [ Java ] (0) | 2019.12.27 |
백준 3053번 택시 기하학 [ Java ] (0) | 2019.12.23 |
프로그래머스 코딩테스트 연습 - 가장 큰 수 [ javascript ] (0) | 2019.12.23 |
백준 4153번 직각삼각형 [ Java ] (0) | 2019.12.23 |