728x90
문제 접근
1. 반복 횟수와 x1,x2,y1,y2,r1,r2를 받는다.
2. 교차 점이 두개인 경우 중심 사이 거리가 두 반지름의 합보다 작고 중심 사이 거리가 두 반지름의 차보다 크다.
3. 한개인 경우 중심 사이의 거리와 두 반지름의 합이 같거나(외접) 중심 사이의 거리와 두 반지름의 차와 같다(내접).
4. 중심점이 같고 반지름이 같으면 무수히 많고, 중심점이 같은데 반지름이 다르면 아예 없다.
느낀점
되게 쉽네 하면서 풀었지만 내접의 경우를 생각하지 못하고 중심점 사이 거리와 두 반지름의 차를 비교할 생각을 못해서 틀렸다. 요즘 자바를 배우고 있어서 자바를 연습할 겸 또 코딩을 하는데 선언이 조금 다른 부분이 있어서 공부하는 계기가 되었다.
코드
#include <stdio.h>
#include <math.h>
int main() {
int n;
scanf("%d", &n);
while (n--) {
int x1, y1, r1, x2, y2, r2;
scanf("%d %d %d %d %d %d", &x1, &y1, &r1, &x2, &y2, &r2);
double distance = sqrt((pow(x2 - x1, 2) + pow(y2 - y1, 2)));
int sub = r1 > r2 ? r1 - r2 : r2 - r1;
if (distance == 0 && r1 == r2) printf("-1\n");
else if (distance < r1 + r2 && distance > sub) printf("2\n");
else if (distance == r1 + r2 || distance == sub) printf("1\n");
else printf("0\n");
}
return 0;
}
import java.util.Scanner;
public class test {
public static void main(String[] arg) {
Scanner sc = new Scanner(System.in);
int T;
T = sc.nextInt();
for (int i = 0 ; i<T;i++) {
int x[] = new int[3];
int y[] = new int[3];
int r[] = new int[3];
for(int j = 0; j<2;j++) {
x[j] = sc.nextInt();
y[j] = sc.nextInt();
r[j] = sc.nextInt();
}
double distance = Math.sqrt(Math.pow(x[1]-x[0], 2)+Math.pow(y[1]-y[0], 2));
int sub = Math.abs(r[0]-r[1]);
int sum = r[0]+r[1];
if(distance == 0 && sub == 0) System.out.println(-1);
else if(distance == sum || distance == sub) System.out.println(1);
else if(distance < r1+r2 && distance > sub) System.out.println(2);
else System.out.println(0);
}
}
}
'문제 풀이 > 백준(BOJ)' 카테고리의 다른 글
[C] 백준 10870번 : 피보나치 수 5 (0) | 2021.03.24 |
---|---|
[C] 백준 10872번 : 팩토리얼 (0) | 2021.03.24 |
[C] 백준 3053번 : 택시 기하학 (0) | 2021.03.22 |
[C] 백준 4153번 : 직각삼각형 (0) | 2021.03.21 |
[C] 백준 3009번 : 네 번째 점 (0) | 2021.03.20 |
댓글