https://www.acmicpc.net/problem/1894
문제
> 평행사변형의 인접한 두 변의 꼭짓점 좌표가 주어졌을 때 나머지 하나의 점 즉, 4번 째 점의 좌표를 구해라.
> 각 줄은 8개의 실수를 입력받는데 각각 첫번째 변의 양끝점의 좌표, 두 번째 변의 양 끝점의 좌표이다.
접근
8개의 입력을 각 점의 x,y좌표로 입력받아 저장한다.
각 점 중에서 같은 좌표인 점의 경우를 모두 따져 점을 정렬하고 4번째 점을 구하는 수식을 이용해 점을 구한다.
문제해결
> 8개의 입력을 pair를 써서 각각의 점의 x,y좌표로 입력을 받는다.
> 받은 점을 각각 1,2,3,4점 이라고 한다면 2,3 점이 같은 좌표일때 문제에서 원하는 점을 구하는 수식은 4번점에서 2번 혹은 3번점(두 점은 같은점)에 1번점을 뺀 값을 뺀 값이다. 즉, 4 - (3(또는2) - 1) 하면 나온다.
> 이 수식을 이용하기 위해 같은좌표가 2,3점이 아닐때를 모두 생각해 좌표를 swap해준후 계산하면 된다.
> 1,3번 점, 1,4번 점, 2,4번 점이 같은 경우를 따져 swap해준다.
코드
#include <iostream>
#include <algorithm>
#include <vector>
#include <iomanip>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
vector<pair<double, double>> point(4);
pair<double, double> result;
while (cin >> point[0].first >> point[0].second
>> point[1].first >> point[1].second
>> point[2].first >> point[2].second
>> point[3].first >> point[3].second)
{
if (point[0] == point[2]) swap(point[0], point[1]);
else if (point[0] == point[3]) swap(point[0], point[1]), swap(point[2], point[3]);
else if (point[1] == point[3]) swap(point[2], point[3]);
result.first = point[3].first - (point[1].first - point[0].first);
result.second = point[3].second - (point[1].second - point[0].second);
cout << fixed << setprecision(3);
cout << result.first << " " << result.second << endl;
}
}

후기
좌표처리에 어려움을 겪었지만 pair의 존재를 알게되었고 이런경우 쓰면 아주 편하다는걸 배웠다.