Baekjoon Online Judge
백준 1002번) 터렛
judy1467
2023. 1. 9. 03:41
본문의 코드보다 더 효율적인 코드가 분명 존재합니다.
참고만 해주시면 감사하겠습니다.
코드 지적은 언제나 환영입니다.
풀이
문제를 두 원의 접점 갯수로 생각하면 쉽게 풀 수 있다.
각각의 사람에대한 적의 거리가 주어졌기 때문에
두 원이 있다고 생각 했을 때 접점의 갯수가 적의 위치가 될 수 있는 좌표의 수 이다.
따라서, 두 사람의 거리를 구하고 거리를 이용하여 두 사람의 관계를 따져보면 교점의 갯수를 구할 수 있다.
코드
#include "iostream"
#include "cmath"
using namespace std;
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int tc;
cin >> tc;
for(int i = 0 ; i < tc ; i++){
int x1, y1, r1, x2, y2, r2;
cin >> x1 >> y1 >> r1;
cin >> x2 >> y2 >> r2;
double distance = sqrt(pow(x1-x2, 2)+pow(y1-y2, 2));
if(distance == 0 && r1 == r2){ // 두 사람이 같은 위치에 있고 적과의 거리가 같음 == 적의 위치가 어디든지 가능
cout << "-1\n";
continue;
}
else if(abs(r1-r2) == distance || r1 + r2 == distance){ // 두 사람이 서로 내접 또는 외접 == 교점이 한 개
cout << "1\n";
continue;
}
else if(abs(r1-r2) < distance && distance < r1+r2){ // 두 사람의 교점이 없음
cout << "2\n";
continue;
}
else{
cout << "0\n";
continue;
}
}
return 0;
}