

이건 정말 어떻게 푸는지 전~혀 모르겠어서 구글링을 했다 ㅎㅎㅜ
문제 조건에 행성계의 경계가 맞닿거나 교차하는 경우가 없다고 했으므로 몇가지 조건만 따져주면 된다
1. 같은 행성계에 존재하면 진입/이탈 0
2. 이탈해야한다면 출발점에서 이탈
3. 진입해야한다면 도착점으로 진입
같은 행성계에 있으면 애초에 진입하거나 이탈할 일 없으므로 continue로 반복문을 빠져나왔다
이탈하는 것은 출발점이 속한 행성계로부터 이탈하는 것이고,
진입하는 것은 도착점이 속한 행성계로 진입하는 것이기 때문에!
원 안에 속해있는지 공식을 세워서 따져줬다
전체 코드는 아래와 같다
#include <iostream>
#include <cmath>
using namespace std;
int T, n;
double x_1, y_1, x_2, y_2;
int main() {
cin.tie(NULL);
cout.tie(NULL);
ios_base::sync_with_stdio(false);
cin >> T;
for (int i = 0; i < T; i++)
{
int cnt = 0;
cin >> x_1 >> y_1 >> x_2 >> y_2;
cin >> n;
for (int i = 0; i < n; i++)
{
int cx, cy, r;
cin >> cx >> cy >> r;
// 같은 행성계에 존재한다면
if (sqrt(pow(x_1 - cx, 2) + pow(y_1 - cy, 2)) < r &&
sqrt(pow(x_2 - cx, 2) + pow(y_2 - cy, 2)) < r) {
continue;
}
// 이탈해야한다면
if (sqrt(pow(x_1 - cx, 2) + pow(y_1 - cy, 2)) < r) {
cnt++;
}
// 진입해야한다면
if (sqrt(pow(x_2 - cx, 2) + pow(y_2 - cy, 2)) < r) {
cnt++;
}
}
printf("%d\n", cnt);
}
}

'백준' 카테고리의 다른 글
[1934] 최소공배수 (0) | 2022.08.19 |
---|---|
[1358] 하키 (0) | 2022.08.12 |
[2477] 참외밭 (0) | 2022.08.12 |
[11478] 서로 다른 부분 문자열의 개수 (0) | 2022.07.30 |
[1269] 대칭 차집합 (0) | 2022.07.30 |
댓글