[백준/파이썬] 1064번 평행사변형 풀이
업데이트:
문제 정보
- 문제 출처: 백준 온라인 저지
- 문제 링크: 1064번 평행사변형
- 문제풀이 코드 GitHub 링크
- 제출 언어: Python 3
풀이
문제
세 점이 주어질 때 만들 수 있는 평행사변형 둘레의 최댓값과 최솟값 차이를 구하는 문제입니다.
세 점이 일직선이면 -1을 출력합니다.
코드
a1,a2,b1,b2,c1,c2=map(int,input().split())
a,b,c=(a1,a2),(b1,b2),(c1,c2)
def ccw(a,b,c):
v=(a[0]*b[1]+b[0]*c[1]+c[0]*a[1])-(a[1]*b[0]+b[1]*c[0]+c[1]*a[0])
try: return v//abs(v)
except ZeroDivisionError: return 0
if ccw(a,b,c) == 0: print(-1)
else:
A=((a[0]-b[0])**2+(a[1]-b[1])**2)**.5
B=((b[0]-c[0])**2+(b[1]-c[1])**2)**.5
C=((c[0]-a[0])**2+(c[1]-a[1])**2)**.5
l=sorted([2*A+2*B,2*B+2*C,2*C+2*A])
print(l[2]-l[0])
설명
먼저 ccw로 세 점의 일직선 여부를 판단합니다.
일직선이 아니면 세 변 길이 A, B, C를 구하고,
가능한 평행사변형 둘레 후보 2(A+B), 2(B+C), 2(C+A)를 계산해
최댓값과 최솟값의 차를 출력합니다.
댓글남기기