SMALL

안녕하세요 오늘은 원의 방정식의 성질을 이용한 문제를 풀어보겠습니다.
코드:
#include <stdio.h>
#include <cmath>
int main(){
int a;
scanf("%d",&a);
for(int i =0; i<a; i++){
int x1, x2, r1, y1, y2, r2;
scanf("%d %d %d %d %d %d",&x1,&y1,&r1,&x2,&y2,&r2);
int d = pow(x1-x2,2) + pow(y1-y2,2);
long long int r1pr2 = pow(r1+r2,2);
int r1mr2 = pow(r1-r2, 2);
if(x1==x2 && y1==y2 && r1 == r2){
printf("-1\n");
}
else if(d<r1pr2 && d>r1mr2){
printf("2\n");
}
else if(d == r1mr2 || d == r1pr2){
printf("1\n");
}
else if(d<r1mr2 || d>r1pr2){
printf("0\n");
}
}
return 0;
}
코드설명:

위 그림과 같이 원의 교점 성질을 이용하여 풀었습니다.
코드에서 변수 d는 원의 교점 사이의 거리의 제곱이고 x1px2는 x1+x2의 제곱, x1mx2는 x1-x2의 제곱입니다.
주의해야할 점:
맨 처음에 있는 if문이 다른 if문 다음에 else if 형태로 오게되면 if문 조건들 사이의 포함 관계에 유의해야합니다.
LIST
'BOJ 문제풀이' 카테고리의 다른 글
백준 2438번 C언어 풀이 (0) | 2021.07.09 |
---|---|
백준 11022번 C언어 풀이 (0) | 2021.07.09 |
백준 2775번 C언어 풀이 (0) | 2021.07.08 |
백준 10171번 파이썬 풀이 (0) | 2020.07.13 |
백준 10718번 파이썬 풀이 (0) | 2020.07.13 |