맨땅에 코딩
백준 1002번: 터렛 / C++ 본문
어떤 문제일까?
https://www.acmicpc.net/problem/1002
문제에서 조규현과 백승환의 위치가 좌표 (𝑥1, 𝑦1), (𝑥2, 𝑦2)로 주어지고, 그로부터 류재명과의 거리가 𝑟1과 𝑟2로 주어지며, 예제 출력의 형태가 2, 1, 0이라는 것을 우리가 직관적으로 봤을 때, 두 원의 교점의 개수를 구하는 문제와 같다는 것을 알 수 있다.
두 원의 교점의 개수 구하기
경우의 수는 총 4가지로, 다음과 같다.
문제에서 주어지는 A (𝑥1, 𝑦1), B(𝑥2, 𝑦2), 𝑟1, 𝑟2를 기준으로 설명하겠다.
A와 B 두 점 사이의 거리를 D라고 하겠다.
1. 두 점에서 만난다.
D < 𝑟1 + 𝑟2
2. 한 점에서 접한다.
D = 𝑟1 + 𝑟2 또는 D = | 𝑟1 - 𝑟2 |
3. 만나지 않는다.
D > 𝑟1 + 𝑟2 또는 D = | 𝑟1 - 𝑟2 |
4. 무수히 많은 점에서 만난다.
𝑟1 = 𝑟2 이고, D = 0
해결
#include <iostream>
#include <cmath>
using namespace std;
int main() {
int x1, y1, x2, y2, r1, r2, t;
cin >> t;
for (int i = 0; i < t; i++) {
cin >> x1 >> y1 >> r1 >> x2 >> y2 >> r2;
double d = sqrt(pow(x1-x2, 2) + pow(y1-y2, 2));
int add = r1 + r2;
int sub = r1 - r2 > 0 ? (r1 - r2) : (-1) * (r1 - r2);
if (r1 == r2 && d == 0) {
cout << -1 << '\n';
}
else if (d > add || d < sub) {
cout << 0 << '\n';
}
else if (d == add || d == sub) {
cout << 1 << '\n';
}
else if (d < add) {
cout << 2 << '\n';
}
}
return 0;
}
'코딩 낙서장' 카테고리의 다른 글
백준 1003번: 피보나치 함수 / C++ (0) | 2024.07.09 |
---|---|
Git commit History 초기화, 삭제하는 법 (0) | 2024.06.10 |