[백준/파이썬] 1064번 평행사변형 풀이

업데이트:



문제 정보


풀이

문제

세 점이 주어질 때 만들 수 있는 평행사변형 둘레의 최댓값과 최솟값 차이를 구하는 문제입니다.

세 점이 일직선이면 -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)를 계산해 최댓값과 최솟값의 차를 출력합니다.



댓글남기기