백준 1485번 바로가기

첫 번째 시도

# 입력
import sys
read = sys.stdin.readline
T = int(read().strip())

# 처리
for _ in range(T):
  d = []
  for _ in range(4):
    x,y=map(int,read().split())
    d.append((x,y))
  d.sort()
  if d[0][0] == d[1][0] and d[2][0] == d[3][0] and d[0][1] == d[2][1] and d[1][1] == d[3][1]:
    print(1)
  else:
    print(0)

최종 제출

# 입력
import sys
read = sys.stdin.readline
T = int(read().strip())

# 처리
def l(a,b):
  return (a[0]-b[0])**2 + (a[1]-b[1])**2

for _ in range(T):
  d = []
  for _ in range(4):
    x,y=map(int,read().split())
    d.append((x,y))
  length = []
  for i in range(4):
    for j in range(i+1,4):
      length.append(l(d[i],d[j]))
  if len(set(length)) == 2:
    print(1)
  else:
    print(0)

CODE REVIEW

  1. 첫 번째 시도에서는 정사각형이 똑바로 놓여있는 경우만 고려해서, 틀!렸!다!
  2. 정사각형의 각 변이 x,y축과 평행하지 않는 경우도 있기 때문에 다른 방법을 생각했다.
  3. 정사각형의 결정 조건은 “네 변의 길이가 동일하고, 두 대각선의 길이가 같다.”인데, 이 조건대로 길이를 확인해보았다.
  4. 점과 점 사이의 거리를 다 구하고, set()안에 집어 넣어준 뒤에 길이의 종류가 2개면 정사각형, 그 외에는 정사각형이 아님! 이라는 논리로 문제를 해결했다.