진입/이탈을 몇번하는지 구하는 문제다.
진입/이탈을 하는 것 --> 행성계 내부와 외부에 출발점과 도착점이 각각 하나씩 있을 때
쉽죠?
행성계의 중심과 출발/도착점 사이의 거리와 반지름의 길이를 비교하면 외부에 있는지 내부에 있는지 알 수 있다.
그러면 출발점과 도착점이 외부, 내부에 각각 하나씩 있을 때 진입/이탈 카운트를 올리면 된다.
<소스코드>
#include <iostream>
using namespace std;
int main()
{
int test_num; //Test case 개수
cin >> test_num;
while(test_num--){
int x1, y1, x2, y2;
int var = 0; //진입, 이탈 몇번
cin >> x1 >> y1 >> x2 >> y2;
int n; //행성계 개수
cin >> n;
while(n--){
int cx, cy, r, d;
bool b1, b2;
cin >> cx >> cy >> r;
d = (x1 - cx) * (x1 - cx) + (y1 - cy) * (y1 - cy);
b1 = d > r*r ? false : true;
d = (x2 - cx) * (x2 - cx) + (y2 - cy) * (y2 - cy);
b2 = d > r*r ? false : true;
if(b1 != b2)
var++;
}
cout << var << '\n';
}
return 0;
}
줄바꿈 안하면 틀린다.
끝.
'[C, C++ 알고리즘]' 카테고리의 다른 글
All pairs Shortest path Problem - Floyd Warshall Algorithm. (0) | 2021.12.10 |
---|---|
[백준 1010] 다리 놓기 (0) | 2021.11.26 |
[백준 1009] 분산처리 (0) | 2021.11.15 |
[백준 1005] ACM CRAFT (0) | 2021.11.13 |
[백준 1002] 터렛 (0) | 2021.11.08 |