반응형
출처: https://www.acmicpc.net/problem/1004
Input
2
-5 1 12 1
7
1 1 8
-3 -1 1
2 2 2
5 5 1
-4 5 1
12 1 1
12 1 2
-5 1 5 1
1
0 0 2
Output
3
0
문제조건에서 원의 경계가 맞닿거나 교차하는 경우는 주어지지 않습니다.
두 점의 상태는 아래의 경우로 나눌 수 있습니다.
① 두 개 모두 원 안에 있는 경우 → +0
: 원의 교차 없이 두 점을 이을 수 있습니다.
② 두 개 모두 원 밖에 있는 경우 → +0
: 원의 바깝 부분을 돌아가서 교차 없이 두 점을 이을 수 있습니다.
③ 둘 중 한 개만 원 안에 있는 경우 → +1
: 하나의 원을 교차할 수 밖에 없습니다.
[빨간색 점을 기준]
▶ d1 < r1 이므로, 원1에 포함되어 있다.
▶ d2 > r2 이므로, 원2에 포함되어 있지 않다.
#include <iostream>
int main() {
int T;
scanf("%d", &T);
for (int i = 0; i < T; ++i) {
int x1, y1, x2, y2;
scanf("%d %d %d %d", &x1, &y1, &x2, &y2);
int n;
scanf("%d", &n);
int count = 0;
for (int j = 0; j < n; ++j) {
int cx, cy, r, d;
bool in1, in2;
scanf("%d %d %d", &cx, &cy, &r);
d = (cx - x1) * (cx - x1) + (cy - y1) * (cy - y1);
in1 = d > r * r ? false : true;
d = (cx - x2) * (cx - x2) + (cy - y2) * (cy - y2);
in2 = d > r * r ? false : true;
// 둘 다 원안에 있는 경우
if (in1 != in2) count++;
}
printf("%d\n", count);
}
}
반응형
'PS 문제 풀이 > Baekjoon' 카테고리의 다른 글
[BOJ] 백준 1914 하노이 탑 (0) | 2021.02.20 |
---|---|
[BOJ] 백준 1159 농구 경기 (0) | 2021.02.20 |
[BOJ] 백준 2042 구간 합 구하기 (0) | 2021.02.20 |
[BOJ] 백준 10989 수 정렬하기 3 (0) | 2021.02.20 |
[BOJ] 백준 10868 최솟값 (0) | 2021.02.20 |
댓글