[BOJ][C#] 1358 하키

LimJaeJun·2023년 11월 24일
0

PS/BOJ

목록 보기
47/108

📕 문제

📌 링크

📗 접근 방식

  • 링크 안에 있는 판단하는 방법으로 링크 밖을 하나씩 제거하는 방식을 생각해내었다.

  • IsInLink 함수

  • 일단 외곽에 있는 모든 좌표들은 볼 필요 없이 false를 반환

  • px < x 일 때

    • 거리를 체크하여 r보다 작거나 같으면 true를 반환
  • px > x + w 일 때

    • 거리를 체크하여 r보다 작거나 같으면 true를 반환

위 그림 처럼 파란색 영역으로 된 곳은 모두 체크한 영역이므로 나머지 부분은 무조건 링크안에 포함이 되기 때문에 true를 반환

📘 코드

namespace BOJ_1358
{
    class Program
    {
        static void Main()
        {
            int[] inputs = Array.ConvertAll(Console.ReadLine().Split(), int.Parse);
            int w = inputs[0];
            int h = inputs[1];
            int x = inputs[2];
            int y = inputs[3];
            int p = inputs[4];

            int count = 0;
            for (int i = 0; i < p; i++)
            {
                inputs = Array.ConvertAll(Console.ReadLine().Split(), int.Parse);
                if (IsInLink(w, h, x, y, inputs[0], inputs[1]))
                {
                    count++;
                }
            }
            Console.WriteLine(count);
        }

        static bool IsInLink(int w, int h, int x, int y, int px, int py)
        {
            int r = h / 2;

			// 왼쪽
            if (px < x - r) return false;
            // 오른쪽
            if (px > x + w + r) return false;
            // 아래
            if (py < y) return false;
            // 위
            if (py > y + h) return false;
            
            // 왼쪽 호 체크
            if (px < x)
            {
                int cy = y + h / 2;
            
                int dx = px - x;
                int dy = py - cy;
            
                return dx * dx + dy * dy <= r * r;
            }
            // 오른쪽 호 체크
            if (px > x + w)
            {
                int cx = x + w;
                int cy = y + h / 2;
                
                int dx = px - cx;
                int dy = py - cy;
            
                return dx * dx + dy * dy <= r * r;
            }

			// 무조건 포함됨
            return true;
        }
    }
}

📙 오답노트

x + w로 체크했어야 했는데 x + h로 체크하고 있었다. 좀 더 신중히 풀자

📒 알고리즘 분류

  • 기하학
profile
Dreams Come True

0개의 댓글

관련 채용 정보