본문 바로가기
알고리즘

[알고리즘/백준] 1485번 정사각형 Python 파이썬

by 배애앰이 좋아 2023. 3. 10.
반응형

 

이번 문제는 고민이 필요했던 문제이다.

 

 

4개의 점이 들어왔을 때, 사각형인지 아닌지 구하는 문제로 사각형의 조건에 대해 잘 생각해봐야했다. 이 점들이 순서대로 들어오는 것도 아니니 어떻게 할까 고민했는데 본인이 사각형의 조건을 "점과 점 사이 거리가 대각선 거리, 변의 거리 2가지 값 밖에 없음" 으로 정의했다. 만약에 이 두가지 값 외 제 3자 다른 거리 값이 나온다면 즉 사각형 아님으로 판별하는 것이다.

 

다음과 같은 코드를 통해 통과하였다.

 

import sys
input = sys.stdin.readline

T = int(input())
check_point = [ [-1]*2 for _ in range(4) ]

for i in range(T):
    for k in range(4):
        check_point[k][0], check_point[k][1] = map(int, input().split())
    diff_distance_min = -1
    diff_distance_max = -1
    check = 1
    # 사각형이라면 점과 점 사이 거리가 대각선 거리, 변의 거리 2가지 값 밖에 없음
    # 그외 다른 거리 값이 나온다면 즉 사각형 아님
    for j in range(4):
        for k in range(j+1, 4):
            nx = (check_point[j][0] - check_point[k][0])*(check_point[j][0] - check_point[k][0])
            ny = (check_point[j][1] - check_point[k][1])*(check_point[j][1] - check_point[k][1])
            distance = nx+ny
            if diff_distance_min == diff_distance_max == -1: # 처음일때
                diff_distance_min = distance
                diff_distance_max = distance
            elif diff_distance_min == diff_distance_max: # 대각선 또는 변의 길이가 처음 들어올때
                if distance > diff_distance_min: # 대각선 길이
                    diff_distance_max = distance
                else: # 변의 길이
                    diff_distance_min = distance
            elif distance == diff_distance_min or distance == diff_distance_max:
                # 아무 이상 없음
                n = 1 # 의미 없는 값
            else: # 이상 있음 사각형 아님
                check = 0
    if check == 1:
        print(1)
    else:
        print(0)

 

코드가 깔끔하지 않다. 그리고 사각형의 정의는 다른 것들도 있어서 위 코드가 꼭 맞다고 할 수 없다. 예를 들어 각을 구할 수도 있고..... 깔끔하게 풀기보다는 직관적으로 푼 것 같다.

 

반응형

댓글