간단한 중~고등학교 수준의 수학 문제.
두 원의 교점 개수를 묻는 문제였다.
class Program
{
static void Main()
{
StreamWriter sw = new(new BufferedStream(Console.OpenStandardOutput()));
int t;
int[] xyr;
int x1, y1, r1;
int x2, y2, r2;
double dist;
t = int.Parse(Console.ReadLine());
while (t-- > 0)
{
xyr = Array.ConvertAll(Console.ReadLine().Split(), int.Parse);
(x1, y1, r1) = (xyr[0], xyr[1], xyr[2]);
(x2, y2, r2) = (xyr[3], xyr[4], xyr[5]);
dist = Math.Sqrt(Math.Pow(x1 - x2, 2) + Math.Pow(y1 - y2, 2));
//1. 교점이 무수히 많음
if (x1 == x2 && y1 == y2 && r1 == r2)
sw.WriteLine(-1);
//2. 교점이 2개
else if (Math.Abs(r1 - r2) < dist && dist < r1 + r2)
sw.WriteLine(2);
//3.교점이 1개
else if (dist == Math.Abs(r1 - r2) || dist == r1 + r2)
sw.WriteLine(1);
//4. 교점이 0개
else
sw.WriteLine(0);
}
sw.Close();
}
}
머리가 복잡할 때는 그림이나 메모를 활용하여 푸는 것도 괜찮다.
문제의 그림은 대략 위와 같이 나타낼 수 있다. (x, y, r에 따라 달라질 수 있다)
여기서 두 중심 사이의 거리는 피타고라스의 정리를 통해 얻을 수 있는데, 얻어낸 거리와 r1, r2를 잘 활용하면 교점의 개수를 구할 수 있다.
어려운 문제는 아니나 원의 교점이라는 아이디어를 떠올리기가 조금 힘들었을 수도 있겠다.
'백준 > 단계별' 카테고리의 다른 글
백준 15652 C#) N과 M (4) (0) | 2023.03.08 |
---|---|
백준 15649 C#) N과 M (1) (0) | 2023.03.08 |
백준 18870 C#) 좌표 압축 (0) | 2022.12.30 |
백준 11651 C#) 좌표 정렬하기 2 (0) | 2022.10.12 |
백준 11650 C#) 좌표 정렬하기 (0) | 2022.10.12 |
댓글