20240521_평행사변형(백준 1894: 4번째 점 (C#))
2024. 5. 21. 18:11ㆍIT/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 |