문제 풀이
알고 보면 쉬운 문제이지만, 생각보다 오래 걸렸습니다.
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 |