Algorithm

[백준 3009] 네 번째 점

Mirab 2021. 12. 5. 18:43
문제 풀이

 

알고 보면 쉬운 문제이지만, 생각보다 오래 걸렸습니다.

 

3개의 점이 주어졌을 때, 좌표 상에서 직사각형을 만들기 위해 남은 나머지 점을 출력하는 문제입니다.

처음에는 각 점 사이의 거리를 구해서 두 개의 거리를 이용해 좌표를 찾으려고 했지만 너무 많은 계산이 들어가서 다시 생각해봤습니다.

 

연관점을 찾다 보니 x좌표, y좌표마다 2개씩 같고, 1개씩은 따로 노는 점을 발견했습니다.

1개씩 짝이 없는 좌표가 바로 우리가 찾는 네 번째 점이라는 점을 착안하여 map을 이용해서 짝의 개수를 카운트했고,

짝이 없는 좌표만 저장해서 출력하는 방법으로 풀었습니다.

 

이후에 다른 풀이를 봤는데, 더 간단한 방법이 있었습니다.

x1, x2, x3

y1, y2, y3

이렇게 주어졌을 때 x1 == x2 이면, x3 가 우리가 찾는 좌표고, 다르다면 x2

y1 == y2 이면, y3 다르다면 y2

이렇게 푸는 방법도 있습니다.

소스 코드
#include <iostream>
#include <cmath>
#include <map>
using namespace std;

int main()
{
	ios_base::sync_with_stdio(0);
	cin.tie(0);

	map<int, int> mx, my;
	for (int i = 0; i < 3; i++)
	{
		int x, y;
		cin >> x >> y;
		mx[x]++;
		my[y]++;
	}

	int x, y;
	for (auto i : mx)
	{
		if (i.second < 2)
		{
			x = i.first;
			break;
		}
	}

	for (auto i : my)
	{
		if (i.second < 2)
		{
			y = i.first;
			break;
		}
	}

	cout << x << ' ' << y << endl;
	return 0;
}

'Algorithm' 카테고리의 다른 글

[백준 7568] 덩치  (0) 2021.12.07
[백준 11866] 요세푸스 문제0  (0) 2021.12.06
[백준 10773] 제로  (0) 2021.12.05
[백준 10026] 적록색약  (0) 2021.12.02
[백준 1225] 이상한 곱셈  (0) 2021.11.30