[BOJ] 1485 정사각형 js

HG·2022년 8월 26일
0

백준

목록 보기
2/2
post-thumbnail

이 문제가 어려운건 아니다.

그냥 4점의 좌표가 들어오니깐, 정사각형의 특징을 사용해서 맞는지 아닌지만 구별하면된다.

근데 그냥 반례가 반례가 아닌 경우도 있는걸 보여주기 위해서 작성했다.

처음에 나는 시간이 조금밖에 안남아서 빨리 풀 요량으로 코드를 작성했다고 핑계를 대본다.

처음에 생각난 방식은

한 점에서 나머지 점까지의 길이 3개를 구한 뒤

가장 큰 길이의 제곱이 가 나머지 두 길이 제곱의 합과 같고 나머지 두개의 길이가 같다고 하면 정사각형이지 라고 생각했다.

사실 맞긴하다. 근데 이건 가장 큰 길이가 중간에 있어야 성립한다.

예를들어 사각형의 모양이

이런식으로 이루어진 사각형이라면, a^2 = b^2+c^2 가 성립하면서 나머지 2길이가 같아지는 반례가된다.

그래서 다른식으로 방법을 바꾼게,

정사각형이면 4변의 길이가 같고, 대각선의 길이가 같으니깐

그냥 set을 만들고 거기에 6개 길이 넣었을대 size가 2이면 되겠네 하고 풀었다.

let n = input.shift();
let square = [];
let answer = [];
for(let i=1; i<=n; i++){
    let length = new Set();
    square = []
    for(let j=0; j<4; j++) {
        square.push(input.shift().split(' ').map(Number))
    }
    for(let i =0; i<4;i++){
        for(let j=i+1; j<4; j++) {
            length.add(Math.pow(square[i][0] - square[j][0],2) +Math.pow(square[i][1] - square[j][1],2))
        }
    }
    if(length.size ==2) answer.push(1)
    else {
        answer.push(0)
    }
}
console.log(answer.join('\n'))

그래서 이런 코드가 나온건데,

다시 곱씹어보면 정삼각형 2개를 붙인 마름모는 반례가된다.

근데 이 문제는 이렇게 풀어도 해결된다.

이유는 문제에서 주어진 조건이 좌표평면위의 정수의 점이기 때문이다.

정수의 점으로는 정삼각형을 나타낼 수 없다.ㅋㅋ

그래서 맞게되었다.

막상 쓰다보니 별 내용없어서 지우고 싶은데 그냥 쓸란다.

profile
Making Body, Making Food, Making Co?de

0개의 댓글