
😎풀이
- 네 변과 두 대각선의 길이를 유클리드 거리로 구함
- 오름차 순 정렬
- 변의 길이가 0보다 크고, 네 변의 길이가 모두 같은지 검증
- 대각선의 길이가 같고, 변의 길이보다 큰지 검증
- 정사각형 만족 여부를 반환
function validSquare(p1: number[], p2: number[], p3: number[], p4: number[]): boolean {
const points = [p1, p2, p3, p4]
const distances = []
for(let i = 0; i < 4; i++) {
const [curX, curY] = points[i]
for(let j = i + 1; j < 4; j++) {
const [nextX, nextY] = points[j]
distances.push(getDistance(curX, curY, nextX, nextY))
}
}
const sortedDist = distances.toSorted((a, b) => a - b)
const isZeroLength = sortedDist[0] === 0
const isSameLength =
sortedDist[0] === sortedDist[1] &&
sortedDist[1] === sortedDist[2] &&
sortedDist[2] === sortedDist[3]
const isDiagonalSame = sortedDist[4] === sortedDist[5]
const isDiagonalLonger = sortedDist[5] > sortedDist[0]
return !isZeroLength && isSameLength && isDiagonalSame && isDiagonalLonger
};
function getDistance(x1: number, y1: number, x2: number, y2: number) {
return Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2)
}