네 점이 주어졌을 때, 네 점을 이용해 정사각형을 만들 수 있는지 없는지를 구하는 프로그램을 작성하시오.
첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 네 줄로 이루어져 있으며, 점의 좌표가 한 줄에 하나씩 주어진다. 점의 좌표는 -100,000보다 크거나 같고, 100,000보다 작거나 같은 정수이다. 같은 점이 두 번 이상 주어지지 않는다.
각 테스트 케이스마다 입력으로 주어진 네 점을 이용해서 정사각형을 만들 수 있으면 1을, 없으면 0을 출력한다.
2
1 1
1 2
2 1
2 2
2 2
3 3
4 4
5 5
1
0
출력값: 네 점이 주어졌을 때, 정사각형을 만들 수 있는지(1), 만들 수 없는지(0) 판단
[정사각형 조건]
1. 네 변의 길이가 모두 같아야함
2. 두 대각선의 길이가 같아야함
정사각형 조건을 만족하면 1 리턴, 아닌 경우 0 리턴
const fs = require('fs');
const input = fs.readFileSync('/dev/stdin').toString().split('\n');
const T = +input[0]; // 테스트 케이스 개수
let line = 1;
let result = '';
for (let t = 0; t < T; t++) {
const points = [];
for (let l = 0; l < 4; l++) {
const [x, y] = input[line + l].split(' ').map(Number);
points.push([x, y]);
}
points.sort((a, b) => a[0] - b[0] || a[1] - b[1]); // 오름차순 정렬
// 1. 두 대각선의 길이가 동일해야함
const diagonal1 =
Math.pow(points[0][0] - points[3][0], 2) +
Math.pow(points[0][1] - points[3][1], 2);
const diagonal2 =
Math.pow(points[1][0] - points[2][0], 2) +
Math.pow(points[1][1] - points[2][1], 2);
if (diagonal1 !== diagonal2) result += 0 + '\n';
else {
// 2. 네 변의 길이가 동일
const len1 =
Math.pow(points[0][0] - points[1][0], 2) +
Math.pow(points[0][1] - points[1][1], 2);
const len2 =
Math.pow(points[0][0] - points[2][0], 2) +
Math.pow(points[0][1] - points[2][1], 2);
const len3 =
Math.pow(points[1][0] - points[3][0], 2) +
Math.pow(points[1][1] - points[3][1], 2);
const len4 =
Math.pow(points[2][0] - points[3][0], 2) +
Math.pow(points[2][1] - points[3][1], 2);
if (len1 !== len2 || len2 !== len3 || len3 !== len4 || len4 !== len1)
result += 0 + '\n';
else result += 1 + '\n';
}
line += 4;
}
console.log(result.trimEnd());