이 문제가 어려운건 아니다.
그냥 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개를 붙인 마름모는 반례가된다.
근데 이 문제는 이렇게 풀어도 해결된다.
이유는 문제에서 주어진 조건이 좌표평면위의 정수의 점이기 때문이다.
정수의 점으로는 정삼각형을 나타낼 수 없다.ㅋㅋ
그래서 맞게되었다.
막상 쓰다보니 별 내용없어서 지우고 싶은데 그냥 쓸란다.