C# 백준1002번 터렛, 원의 내접, 외접

2022. 1. 3. 17:20C#/[백준] 기본 수학2

문제

코드 :

using System;

namespace _11
{
    class Program
    {
        static void Main(string[] args)
        {
            int T = Convert.ToInt32(Console.ReadLine());

            for (int i = 0; i < T; i++)
            {
                string input = Console.ReadLine();
                string[] inputdata = input.Split(' ');
                int x1, y1, r1, x2, y2, r2;

                x1 = Convert.ToInt32(inputdata[0].ToString());
                y1 = Convert.ToInt32(inputdata[1].ToString());
                r1 = Convert.ToInt32(inputdata[2].ToString());
                x2 = Convert.ToInt32(inputdata[3].ToString());
                y2 = Convert.ToInt32(inputdata[4].ToString());
                r2 = Convert.ToInt32(inputdata[5].ToString());

                //두 좌표사이의 거리의 제곱
                int d = ((x1 - x2) * (x1 - x2)) + ((y1 - y2) * (y1 - y2));
                //두 반지름의 합의 제곱
                int pR = (r1 + r2) * (r1 + r2);
                int mR = (r1 - r2) * (r1 - r2);

                if (d == pR || d == mR)
                {
                    if (x1 == x2 && y1 == y2 && r1 == r2)
                        Console.WriteLine("-1");
                    else
                        Console.WriteLine('1');
                }
                //좌표가 다른데 반지름의 합이 더 큰경우
                else if (mR < d && d < pR)
                    Console.WriteLine('2');
                else if (pR < d || mR > d)
                    Console.WriteLine('0');
            }
        }
    }
}

문제를 그림으로 그려보면 원의 내접, 외접과 관련된 문제임을 알 수 있다.

인터넷에서 내접, 외접등을 공부하면 코드를 쉽게 구현할 수 있다.

내 코드의 특징은 두 좌표 사이의 거리를 구할때 마지막에 제곱근을 구하는데 제곱근을 구하는 과정에서 값이 소실됨을 우려하여 제곱근을 구하지 않고 제곱상태에서 값을 구했다.