본문 바로가기

백준/실버

[백준 1485번] 정사각형 (C++)

문제링크 : 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가지가 서로 같은지를 체크하고 이에 따른 값을 출력해주면 된다.