[BOJ][C#] 1004 어린 왕자

LimJaeJun·2023년 11월 23일
0

PS/BOJ

목록 보기
45/108

📕 문제

📌 링크

📗 접근 방식

  • 각 행성의 중심에서 시작점과 끝점까지의 거리를 계산
  • 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;
        }
    }
}

📙 오답노트

📒 알고리즘 분류

  • 수학
  • 기하학
profile
Dreams Come True

0개의 댓글

관련 채용 정보