728x90
https://www.acmicpc.net/problem/1002
두 원 사이의 교점의 갯수를 구하는 문제로
공식을 알고 있으면 풀 수 있는 문제다
두 원의 중심좌표간 거리를 s 라 할때, s 는 아래의 식으로 구해진다.
그리고 두 원 사이의 교점의 갯수는
1. 두 원의 중심좌표가 서로 같은 경우 (x2 == x1 && y2 == y1)
-1) r1 != r2 이면 교차하는 점의 갯수가 0
-2) r1 == r2 이면 교차하는 점의 갯수가 원이므로 무한대
2. 1이 아닐때
-1) abs(r1 - r2) < s && s < r1 + r2 이면 교차하는 점의 갯수가 2개
-2) abs(r1 - r2) == s || s == (r1 + r2) 이면 교차하는 점의 갯수가 1개
-3) r1 + r2 < s 일때 교차하는 점의 갯수가 0 개 이다.
이점에 유의하여 코드를 작성하면 통과한다.
- c++
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
cin.tie(nullptr);
ios_base::sync_with_stdio(false);
int T, x1, y1, r1, x2, y2, r2;
double s;
cin >> T;
while (T--) {
cin >> x1 >> y1 >> r1 >> x2 >> y2 >> r2;
s = sqrt(pow(x1 - x2, 2) + pow(y1 - y2, 2));
if (x1 == x2 && y1 == y2) {
if (r1 == r2) {
cout << -1 << '\n';
}
else {
cout << 0 << '\n';
}
}
else if (abs(r1 - r2) < s && s < r1 + r2) {
cout << 2 << '\n';
}
else if (abs(r1 - r2) == s || s == r1 + r2) {
cout << 1 << '\n';
}
else {
cout << 0 << '\n';
}
}
return 0;
}
|
cs |
728x90
'PS' 카테고리의 다른 글
BOJ 2042 - 구간 합 구하기 (0) | 2020.08.11 |
---|---|
BOJ 2309 - 일곱 난쟁이 (0) | 2020.08.11 |
BOJ 1759 - 암호 만들기 (0) | 2020.08.05 |
BOJ 3613 - Java vs C++ (0) | 2020.08.02 |
BOJ 1919 - 애너그램 만들기 (0) | 2020.08.02 |