알고리즘 공부/백준

(Python)백준 코딩테스트 연습 - 정사각형(1485)

HRuler 2023. 2. 14. 14:10

1. 문제

https://www.acmicpc.net/problem/1485

 

1485번: 정사각형

첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 네 줄로 이루어져 있으며, 점의 좌표가 한 줄에 하나씩 주어진다. 점의 좌표는 -100,000보다 크거나 같고, 100,000보다 작거나 같

www.acmicpc.net

2. 풀이

import sys
input = sys.stdin.readline

# t : 테스트케이스 수
t = int(input())

t_l = [[] for i in range(t)]

for i in range(t):
    for j in range(4):
        t_l[i].append(list(map(int, input().split())))
        
for i in t_l:
    dist = []
    for k1, v1 in enumerate(i):
        for j in i[k1+1:]:
            dist.append(((v1[0] - j[0]) ** 2) + ((v1[1] - j[1]) ** 2))
    dist.sort()
    
    if dist[0] == dist[1] and dist[1] == dist[2] and dist[2] == dist[3] and dist[4] == dist[5]:
        print(1)
    else:
        print(0)

3. 후기

 - 처음 문제를 해결하려던 방식은 각 점에서 다른 세 점의 길이를 모두 측정하여 리스트에 담아두고, 정렬한 후 나온 4개의 리스트가 같은지를 비교하는 방식으로 했다.

 계속되는 '틀렸습니다.'에 방식을 바꾸게 됐고, 위와 같은 각 3변의 길이와 2개의 대각선 길이를 측정한 후 변끼리, 대각선끼리 같은지 확인하는 방식으로 바꾸어 해결하였다.