(C++) 백준 1894번 - 4번째 점

코딩너구리·2025년 10월 5일

코딩 문제 풀이

목록 보기
17/266

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의 존재를 알게되었고 이런경우 쓰면 아주 편하다는걸 배웠다.

0개의 댓글