[C++ 백준] 1002 터렛
728x90
반응형
블로그에 올리는 모든 문제 풀이는 깃허브에 올려져 있습니다.
문제 설명
- 조규현의 좌표(X1, Y1)와 백승환의 좌표(X2, Y2)가 주어지고, 조규현이 계산한 류재명과의 거리 r1과 백승환이 계산한 류재명과의 거리 r2가 주어졌을 때, 류재명이 있을 수 있는 좌표의 수를 출력하는 프로그램을 작성하시오.
단, 위치의 개수가 무한대일 경우에는 -1을 출력한다. - 첫째줄에 테스트 케이스의 개수 T가 주어지며, 각 테스트 케이스의 한 줄에 x1, y1, r1, x2, y2, r2가 주어진다.
(단, -10,000 <= (x1, y1, x2, y2) <= 10,000, r1, r2 <= 10,000)
풀이 전략
- 어떤 지점에서 길이가 같은 점들의 집합이 원이므로, 원 두 개를 그린 뒤 그 두 개의 원의 교점의 개수를 리턴
- 원이 완전히 동일하면 위치의 개수가 무한대 ( d=0, r1=r2)
- 교점이 생길 수 있는 경우의 수는 다음과 같음
소스 코드
#include <iostream>
#include <cmath>
// 터렛
using namespace std;
int main()
{
int t;
cin >> t;
for (int i = 0; i < t; ++i)
{
int x, y, r, x2, y2, r2;
cin >> x >> y >> r >> x2 >> y2 >> r2;
double d = sqrt(((x - x2) * (x - x2)) + ((y - y2) *(y - y2)));
double sub = r > r2 ? r - r2 : r2 - r;
if ( d == 0 && r == r2 )
cout << "-1" << '\n';
else if (r + r2 == d || sub == d)
cout << "1" << '\n';
else if (sub < d && d < (r + r2))
cout << "2" << '\n';
else
cout << "0" << '\n';
}
}
링크
https://www.acmicpc.net/problem/1002
728x90
반응형
'문제풀이 > BOJ' 카테고리의 다른 글
[C++ 백준] 1929 소수 구하기 (0) | 2021.06.13 |
---|---|
[C++ 백준] 1065 한수 (0) | 2021.06.12 |
[C++ 백준] 1436 영화감독 숌 (0) | 2021.05.31 |
[C++ 백준] 10250 ACM 호텔 (0) | 2021.05.29 |
[C++ 백준] 2941 크로아티아 알파벳 (0) | 2021.05.28 |
댓글
이 글 공유하기
다른 글
-
[C++ 백준] 1929 소수 구하기
[C++ 백준] 1929 소수 구하기
2021.06.13 -
[C++ 백준] 1065 한수
[C++ 백준] 1065 한수
2021.06.12 -
[C++ 백준] 1436 영화감독 숌
[C++ 백준] 1436 영화감독 숌
2021.05.31 -
[C++ 백준] 10250 ACM 호텔
[C++ 백준] 10250 ACM 호텔
2021.05.29