반응형
이번 문제는 고민이 필요했던 문제이다.
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)
코드가 깔끔하지 않다. 그리고 사각형의 정의는 다른 것들도 있어서 위 코드가 꼭 맞다고 할 수 없다. 예를 들어 각을 구할 수도 있고..... 깔끔하게 풀기보다는 직관적으로 푼 것 같다.
반응형
'알고리즘' 카테고리의 다른 글
[알고리즘/백준] 1103번 게임 Python 파이썬 (0) | 2023.03.13 |
---|---|
[알고리즘/백준] 2615번 오목 Python 파이썬 (0) | 2023.03.12 |
[알고리즘/백준] 1358번 하키 Python 파이썬 (0) | 2023.03.09 |
[알고리즘/백준] 1326번 폴짝폴짝 Python 파이썬 (0) | 2023.03.06 |
[알고리즘/백준] 2777번 숫자 놀이 Python 파이썬 (0) | 2023.03.04 |
댓글