20240521_평행사변형(백준 1894: 4번째 점 (C#))

2024. 5. 21. 18:11IT/TIL

오늘의 TIL은 도형 중의 평행사변형의 성질에 관한 내용이다.

 

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


백준 알고리즘 문제 1894번 4번째 점 문제를 풀이하는데

평행사변형의 성질을 이용해서 풀이하는 것이 용이해서 정리하게 되었다.

 

문제는 8개의 실수로 주어지는 두 변의 좌표가 주어질 때

나머지 한 점의 좌표를 알아내는 것이다.

(총 4개의 점의 좌표가 주어지지만,

한 점은 중복되어 주어지므로 주어지는 총 좌표의 수는 3개이다)

 

 

예를 들어 위처럼 평행사변형이 주어진 경우,

AD의 길이는 AB의 길이 + AC의 길이이다. (벡터의 덧셈)

점 D의 위치는 점 B와 C의 위치에서 A를 빼면 구할 수 있다.

따라서

D = B + C - A

로 정리할 수 있다.

 

따라서 문제를 풀이하면 아래와 같이 코드를 작성할 수 있는데

 

namespace _1894
{
    internal class Program
    {
        static void Main(string[] args)
        {
            string input;
            while ((input = Console.ReadLine()) != null)
            {
                string[] parts = input.Split(' ');
                double x1 = double.Parse(parts[0]);
                double y1 = double.Parse(parts[1]);
                double x2 = double.Parse(parts[2]);
                double y2 = double.Parse(parts[3]);
                double x3 = double.Parse(parts[4]);
                double y3 = double.Parse(parts[5]);
                double x4 = double.Parse(parts[6]);
                double y4 = double.Parse(parts[7]);

                double x5, y5;

                if (IsSamePoint(x1, y1, x3, y3))
                {
                    x5 = x2 + x4 - x1;
                    y5 = y2 + y4 - y1;
                }
                else if (IsSamePoint(x1, y1, x4, y4))
                {
                    x5 = x2 + x3 - x1;
                    y5 = y2 + y3 - y1;
                }
                else if (IsSamePoint(x2, y2, x3, y3))
                {
                    x5 = x1 + x4 - x2;
                    y5 = y1 + y4 - y2;
                }
                else
                {
                    x5 = x1 + x3 - x2;
                    y5 = y1 + y3 - y2;
                }

                Console.WriteLine($"{x5:F3} {y5:F3}");
            }
        }

        static bool IsSamePoint(double x1, double y1, double x2, double y2)
        {
            return x1 == x2 && y1 == y2;
        }
    }
}

 

문제에서 어느 점이 중복되는 점(A)인지 알려주지 않았기 때문에

IsSamePoint라는 매서드를 만들어서 중복되는 점에 따른 A, B, C의 배치를 다르게 구현했다.

 

 

이 문제의 경우에는 평행사변형의 성질을 알고 있다면 쉽게 풀이할 수 있지만,

알지 못한다면 풀이하는 방법이 매우 난해할 수 있다.

이 문제를 풀면서 기본적인 도형에 대한 성질을 정리하였다.

'IT > TIL' 카테고리의 다른 글

20240513_C#에서 숫자 표기 관련  (0) 2024.05.13
20240511_택시 기하학  (0) 2024.05.11
20240402_StringBuilder  (0) 2024.04.02
20240329_금과 은 운반하기(프로그래머스)  (1) 2024.03.30
20240328_A로 B 만들기(프로그래머스)  (0) 2024.03.28