https://www.acmicpc.net/problem/1002
1002번: 터렛
각 테스트 케이스마다 류재명이 있을 수 있는 위치의 수를 출력한다. 만약 류재명이 있을 수 있는 위치의 개수가 무한대일 경우에는 -1을 출력한다.
www.acmicpc.net
문제해석
두 점 사이의 거리공식을 통해 방정식을 세우면 원의 방정식이 나오는데 결국 두 원의 교점의 개수를 구하는 문제가 된다.
두 원이 일치할때 무한대이므로 -1을 출력한다.
두 원의 중심사이의 거리가 두 원의 반지름의 차이보다는 크고 두 원의 반지름의 합보다는 작은경우
두 원의 교점이 두개가 되므로 2를 출력한다.
두 원의 중심사이의 거리가 두 원의 반지름의 차이와 같거나 두 원의 반지름의 합과 같은경우
두 원의 교점이 한개가 되므로 1을 출력한다.
그 외에는 0을 출력한다.
코드
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
int main(){
cout.tie(NULL);
cin.tie(NULL);
ios_base::sync_with_stdio(false);
int t,x1,y1,r1,x2,y2,r2;
cin>>t;
while(t--)
{
cin>>x1>>y1>>r1>>x2>>y2>>r2;
if(x1==x2&&y1==y2&&r1==r2)
{
cout<<-1<<"\n";
}
else
{
if((r1-r2)*(r1-r2)<(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)&&(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)<(r1+r2)*(r1+r2))
{
cout<<2<<"\n";
}
else if((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)==(r1+r2)*(r1+r2)||(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)==(r1-r2)*(r1-r2))
{
cout<<1<<"\n";
}
else
{
cout<<0<<"\n";
}
}
}
}
'백준문제풀이' 카테고리의 다른 글
백준 문제 1334번 다음 팰린드롬 수 문제풀이 python (0) | 2022.03.20 |
---|---|
백준 문제 1005번 ACM Craft 문제풀이 c++ (0) | 2022.03.13 |
백준 문제 17387번 선분 교차 2 문제풀이 c++ (0) | 2022.03.13 |
백준 문제 17386번 선분 교차 1 문제풀이 c++ (0) | 2022.03.13 |
백준 문제 11758번 CCW 문제풀이 c++ (0) | 2022.03.13 |