본문 바로가기

Algorithm/BAEKJOON

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

728x90
반응형

https://www.acmicpc.net/problem/1485

 

1485번: 정사각형

첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 네 줄로 이루어져 있으며, 점의 좌표가 한 줄에 하나씩 주어진다. 점의 좌표는 -100,000보다 크거나 같고, 100,000보다 작거나 같

www.acmicpc.net

 

#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;

int main() {
	int n, x, y;
	cin >> n;
	
	for(int i = 0; i < n; i++){
		vector<pair<int, int>> v;
		vector<int> s;
		for(int j = 0; j < 4; j++){
			cin >> x >> y;
			v.push_back({x, y});
		}
		for(int j = 0; j < 4; j++){
			for(int z = j + 1; z < 4; z++){
				s.push_back(pow(v[j].second - v[z].second, 2) + pow(v[j].first - v[z].first, 2));
			}
		}
		sort(s.begin(), s.end());
		if(s[0] == s[1] && s[1] == s[2] && s[2] == s[3] && s[4] == s[5]) cout << 1 << endl;
		else cout << 0 << endl;
	}
	return 0;
}

 

정사각형이 되는 조건은

1. 모든 변의 길이가 같다.

2. 대각선의 길이가 서로 같다.

 

주어진 네 개의 점 간의 거리를 계산하면 6개의 길이가 나온다. 이 6개의 길이를 sort하면 앞에 있는 4개의 길이가 변의 길이이고, 나머지 2개의 길이가 대각선의 길이이다. (정사각형은 항상 변의 길이보다 대각선의 길이가 길기 때문)

728x90
반응형