😎풀이

  1. 네 변과 두 대각선의 길이를 유클리드 거리로 구함
  2. 오름차 순 정렬
  3. 변의 길이가 0보다 크고, 네 변의 길이가 모두 같은지 검증
  4. 대각선의 길이가 같고, 변의 길이보다 큰지 검증
  5. 정사각형 만족 여부를 반환
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)
}
profile
내 지식을 공유할 수 있는 대담함

0개의 댓글