목차
https://www.acmicpc.net/problem/1002
코드
#include <iostream>
#include <cmath>
using namespace std;
class turret
{
public :
double x;
double y;
double r;
turret(double _x, double _y, double _r)
{
x = _x;
y = _y;
r = _r;
}
void change_value(double _x, double _y, double _r)
{
x = _x;
y = _y;
r = _r;
}
};
double cal_distance(turret t1, turret t2)
{
return sqrt(pow(abs(t2.x - t1.x), 2) + pow(abs(t2.y - t1.y), 2));
}
bool isSame(turret t1, turret t2)
{
if(t1.x == t2.x && t1.y == t2.y && t1.r == t2.r)
{
return true;
}
else
{
return false;
}
}
int main() {
int t;
cin >> t;
double x1, x2, y1, y2, r1, r2, dis, sum_r, sub_r;
turret big_circle = turret(0, 0, 0);
turret small_circle = turret(0, 0, 0);
for(int i=0; i<t; i++)
{
cin >> x1 >> y1 >> r1 >> x2 >> y2 >> r2;
if(r1 > r2)
{
big_circle.change_value(x1, y1, r1);
small_circle.change_value(x2, y2, r2);
}
else
{
big_circle.change_value(x2, y2, r2);
small_circle.change_value(x1, y1, r1);
}
dis = cal_distance(big_circle, small_circle);
sum_r = big_circle.r + small_circle.r;
sub_r = big_circle.r - small_circle.r;
if(isSame(big_circle, small_circle))
{
cout << -1 << endl;
}
else
{
if(sum_r < dis || sub_r > dis) // 0개
{
cout << 0 << endl;
}
else if(sum_r == dis || sub_r == dis)
{
cout << 1 << endl;
}
else if(sum_r > dis || sub_r < dis)
{
cout << 2 << endl;
}
}
}
return 0;
}
굳이 클래스를 쓸 필요는 없는데, 그냥 한 번 써보고 싶어서 써봤다.
https://wonsang98.tistory.com/16
풀이의 해설의 경우는 이전에 쓴 글과 접근방법이 거의 비슷해서 위의 글을 참고하는편이 좋을것같다.
대략 케이스가 7가지 있다는것을 알고 풀면 되는 문제이다.
'공부 > 백준(C++) - 2022~' 카테고리의 다른 글
백준 10870번: 피보나치 수 5 [C++] (0) | 2022.01.23 |
---|---|
백준 10872번: 팩토리얼 [C++] (0) | 2022.01.23 |
백준 3053번: 택시 기하학[C++] (0) | 2022.01.20 |
백준 4153번: 직각삼각형[C++] (0) | 2022.01.20 |
백준 3009번: 네 번째 점[C++] (0) | 2022.01.19 |