📕 문제
📌 링크
![](https://velog.velcdn.com/images/wowns226/post/6ee42130-037e-4375-9cb8-4a35abe95267/image.png)
📗 접근 방식
- 각 행성의 중심에서 시작점과 끝점까지의 거리를 계산
- r보다 큰 경우 start, end는 해당 원 밖에 있다.
- r보다 작은 경우 start, end는 해당 원 안에 있다.
- 둘 다 밖에 있거나 둘 다 안에 있는 경우는 카운팅을 하지 않아도 된다.
- 둘 중 하나만 해당한다면 카운팅
📘 코드
using System.Text;
namespace BOJ_1004
{
class Program
{
static void Main()
{
StringBuilder sb = new StringBuilder();
int testCase = int.Parse(Console.ReadLine());
int[] inputs;
int planetCount, r, count;
(int, int) start, end, circle;
while (testCase-- > 0)
{
count = 0;
inputs = Array.ConvertAll(Console.ReadLine().Split(), int.Parse);
start = (inputs[0], inputs[1]);
end = (inputs[2], inputs[3]);
planetCount = int.Parse(Console.ReadLine());
for (int i = 0; i < planetCount; i++)
{
inputs = Array.ConvertAll(Console.ReadLine().Split(), int.Parse);
circle = (inputs[0], inputs[1]);
r = inputs[2];
bool isStart = IsSmallThanR(start, circle, r);
bool isEnd = IsSmallThanR(end, circle, r);
if((isStart && !isEnd) || (!isStart && isEnd))
{
count++;
}
}
sb.AppendLine(count.ToString());
}
Console.Write(sb);
}
static bool IsSmallThanR((int,int) point, (int,int) circlePoint, int r)
{
int a = point.Item1 - circlePoint.Item1;
int b = point.Item2 - circlePoint.Item2;
return a * a + b * b < r * r;
}
}
}
📙 오답노트
📒 알고리즘 분류