https://www.acmicpc.net/problem/1002
해설
먼저, 문제가 깨끗하게 읽히진 않는다.
문제에서 좌표가 나오고 거리가 주어지니 우리는 고등학교 과정의 수학( 두 원의 위치 관계 )을 떠올려야 한다.
3가지를 생각해보자.
i) 두 원이 두 점에서 만나는 경우
두 반지름의 합이 두 점 사이의 거리의 합보다 크고, 두 반지름의 차가 두점 사이의 거리의 합보다 작아야 한다. (한 원이 다른 원 안에 있는 경우)
ii) 두 원이 한 점에서 만나는 경우
두 반지름의 합이 두 점 사이의 거리의 합과 같거나 두 반지름의 차가 두 점 사이의 거리의 합과 같다. ( i)와 마찬가지로 한 원이 다른 원 안에 있을 수 있음.)
iii) 두 원이 만나지 않는 경우
i), ii) 케이스의 나머지 케이스들이라고 생각하면 된다.
˙˙˙
소스코드
#include <iostream>
using namespace std;
int main() {
int n;
int x1,y1,r1,x2,y2,r2;
cin >> n;
for(int i=0; i<n; i++){
cin >> x1 >> y1 >> r1 >> x2 >> y2 >> r2;
int d = (x2-x1)*(x2-x1) + (y2-y1)*(y2-y1);
int r = (r1+r2)*(r1+r2);
int rr = (r1-r2)*(r1-r2);
if(d==0){
if(rr==0)
cout << "-1" << '\n';
else
cout <<"0"<<'\n';
}
else if(d==r || d==rr)
cout << "1" << '\n';
else if(rr<d && d<r)
cout << "2" << '\n';
else
cout << "0" << '\n';
}
}
문제 해설의 오류 지적 언제나 환영입니다.
'백준 문제 풀이' 카테고리의 다른 글
[백준 1008] A/B (0) | 2020.03.19 |
---|---|
[백준 1004] 어린 왕자 (3) | 2020.03.19 |
[백준 1003] 피보나치 함수 (0) | 2020.03.19 |
[백준 1001] A-B (0) | 2020.03.19 |
[백준 1000] A+B (0) | 2020.03.19 |
댓글