문제링크 : https://www.acmicpc.net/problem/1485
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int MAX = INT_MAX;
int T, x, y;
int main()
{
ios_base::sync_with_stdio(0);
cin.tie(0);
cin >> T;
while(T--)
{
vector<pii>v;
vector<int>result;
for(int i=0; i<4; i++)
{
cin >> x >> y;
v.push_back({x, y});
}
for(int i=0; i<4; i++)
{
for(int j=i+1; j<4; j++)
{
result.push_back(pow(v[i].first-v[j].first, 2) + pow(v[i].second-v[j].second, 2)); //거리구하기
}
}
sort(result.begin(), result.end());
//정사각형 조건 -> 모든 변의 길이가 같고(0~3) 대각선의 길이가 같음(4~5)
if(result[0]==result[1] && result[1]==result[2] && result[2]==result[3] && result[4]==result[5]) cout << 1 << "\n";
else cout << 0 << "\n";
}
return 0;
}
정사각형의 조건인 모든 변의 길이가 같고, 대각선의 길이가 서로 같은 것을 이용한다.
먼저 점들 사이의 거리를 구해서 다 담아주고 이를 정렬해준다.
정렬을 하면 총 6가지의 값이 담긴다.
앞의 4가지는 변의 길이, 뒤의 2가지는 대각선의 길이이다.
이제 앞의 4가지가 모두 같은지, 뒤의 2가지가 서로 같은지를 체크하고 이에 따른 값을 출력해주면 된다.
'백준 > 실버' 카테고리의 다른 글
[백준 1337번] 올바른 배열 (C++) (0) | 2024.05.06 |
---|---|
[백준 1246번] 온라인 판매 (C++) (0) | 2024.05.05 |
[백준 2659번] 십자카드 문제 (C++) (0) | 2024.05.03 |
[백준 11536번] 줄 세우기 (C++) (0) | 2024.05.02 |
[백준 14729번] 칠무해 (C++) (0) | 2024.05.01 |