static void Main(string[] args)
        {
            short x1, x2, y1, y2, r1, r2;
            short test_case = short .Parse(System.Console.In.ReadLine());

            while (test_case != 0)
            {
                string pos_input = System.Console .In.ReadLine();
                string[] pos_array = pos_input.Split();
                x1 = short.Parse(pos_array[0]);
                y1 = short.Parse(pos_array[1]);
                r1 = short.Parse(pos_array[2]);
                x2 = short.Parse(pos_array[3]);
                y2 = short.Parse(pos_array[4]);
                r2 = short.Parse(pos_array[5]);

                double distance = Math .Sqrt(Math.Pow(x1 - x2, 2) + Math.Pow(y1 - y2, 2));

                if (distance == 0 && r1 == r2)
                {
                    System. Console.Out.WriteLine(-1);
                }
                else if (distance < Math.Abs(r1 - r2))
                {
                    System. Console.Out.WriteLine(0);
                }
                else if (distance == Math.Abs(r1 - r2))
                {
                    System. Console.Out.WriteLine(1);
                }
                else if (distance < r1 + r2)
                {
                    System. Console.Out.WriteLine(2);
                }
                else if (distance == r1 + r2)
                {
                    System. Console.Out.WriteLine(1);
                }
                else if (distance > r1 + r2)
                {
                    System. Console.Out.WriteLine(0);
                }

                test_case--;
            }

        }


[문제]

https://www.acmicpc.net/problem/1002


[풀이]

중학교 때 풀던 수학문제를 생각 하면 된다


두 점이 주어지고 각 점에서의 거리 r이 각각 주어졌으므로, 두 점을 중심으로 하고 각각 r을 반지름으로 하는 두 원이 몇 개의 점에서 만나는지 찾으면 된다.

경우의 수는 총 6가지.


1.두 원이 일치하는 경우


d = 0 이고 r1 = r2 가 같다. 이 경우 무한한 경우의 수가 나오므로 -1 리턴




2.작은 원이 큰 원 안에 속해 있고, 테두리가 접하지 않는 경우


r1 - r2 의 절대값이 d 보다 크다. 즉, 

이 경우 두 원이 만나지 않으므로 경우의 수는 0이다.





3.작은 원이 큰 원 안에 속해 있고, 한 점에서 접해있는 경우

r1 - r2의 절대값이 d와 같다. 즉, 

이 경우 근의 수가 1이므로 경우의 수 역시 1이다.



4.두 원이 두 점에서 만나는 경우


r1 + r2 가 d 보다 큰 경우이다. 이 경우 원은 두 점에서 만난다. 즉, 

이 경우 근의 개수가 2이므로 경우의 수도 2.



5.두 원이 겹치지 않고, 한 점에서 만나는 경우


 한 점에서 만나므로 1 리턴.



6.두 원이 만나지 않는 경우



 근이 없으므로 0 리턴.



=> 수학적 능력 보다는 해당 문제를 보고 두 원의 관계에 대한 접근으로 다가갈 수 있느냐를 판단하는 문제 인듯.



Posted by Righ
,