日本語
[BOJ 1485, Python] 正方形

[BOJ 1485, Python] 正方形

BOJ 1485、「正方形」問題のPythonによる解法

問題リンク

BOJ 1485

カテゴリ

幾何学(geometry)、ソート(sorting)

説明

この手順に従って正方形の判定を行えばよい。

  1. 4つの点を結ぶ6本の辺の長さをすべて確認
  2. ソート
  3. 先頭4つの長さが同じか確認
  4. 後方2つが正方形の対角線の長さとして適切か確認
  5. すべてを満たす場合のみ、正方形を描画可能として処理

解答コード

# 정사각형

import sys
from math import sqrt, isclose
from itertools import combinations

input = sys.stdin.readline

def distance(coord_1: list, coord_2: list) -> int:
    return sqrt(pow(coord_1[0] - coord_2[0], 2) + pow(coord_1[1] - coord_2[1], 2))

testcase = int(input())

output = []

for _ in range(testcase):

    is_square = True

    coord_info = []

    for _ in range(4):
        coord_info.append(list(map(int, input().split())))

    edge_info = []

    for edge_distance in combinations(coord_info, 2):
        edge_info.append(distance(edge_distance[0], edge_distance[1]))

    edge_info.sort()

    for idx in range(1, 4):
        if not isclose(edge_info[0], edge_info[idx]):
            is_square = False
            break

    if is_square:
        for idx in range(4, 6):
            if not isclose(pow(edge_info[0], 2) * 2, pow(edge_info[idx], 2)):
                is_square = False
                break

    if is_square:
        output.append(1)

    else:
        output.append(0)

for result in output:
    print(result)

댓글 작성

게시글에 대한 의견을 남겨 주세요.

댓글 0