백준_1485_정사각형

Minji Lee·2025년 4월 24일
0

JS코딩테스트

목록 보기
110/122

정사각형

문제

네 점이 주어졌을 때, 네 점을 이용해 정사각형을 만들 수 있는지 없는지를 구하는 프로그램을 작성하시오.

입력

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

출력

각 테스트 케이스마다 입력으로 주어진 네 점을 이용해서 정사각형을 만들 수 있으면 1을, 없으면 0을 출력한다.

예제 입력 1

2
1 1
1 2
2 1
2 2
2 2
3 3
4 4
5 5

예제 출력 1

1
0

풀이 및 해설

출력값: 네 점이 주어졌을 때, 정사각형을 만들 수 있는지(1), 만들 수 없는지(0) 판단

[정사각형 조건]
1. 네 변의 길이가 모두 같아야함
2. 두 대각선의 길이가 같아야함

정사각형 조건을 만족하면 1 리턴, 아닌 경우 0 리턴

Code

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());

0개의 댓글