-
[백준] 1064 - 평행사변형Algorithm 문제 2019. 7. 3. 20:59
https://www.acmicpc.net/problem/1064
평행사변형이 존재하지 않는 경우를 먼저 계산해야 한다.
세 점이 동일한 직선 상에 있는 경우 평행사변형을 그릴 수 없으므로 a와 b, a와 c 사이의 기울기를 비교하면 된다.
이때, 나눗셈으로 기울기를 계산하면 division by zero 에러가 발생할 수 있으므로 양 변에 곱하여 비교해야 한다.
평행사변형의 길이는 네 번째 점의 위치를 모르더라도 구할 수 있다.
각 변은 a-b, a-c, b-c 중 하나와 같은 길이를 가질 것이기 때문에 최대 둘레와 최소 둘레의 차는
(가장 긴 변 - 가장 짧은 변) * 2 와 같다.
<Python 코드>
12345678910111213141516from decimal import *def dist(a, b):return ((a[0] - b[0]) * (a[0] - b[0]) + (a[1] - b[1]) * (a[1] - b[1])).sqrt()getcontext().prec = 28xa, ya, xb, yb, xc, yc = tuple(map(Decimal, input().split()))a, b, c = (xa, ya), (xb, yb), (xc, yc)la, lb, lc = dist(b, c), dist(a, c), dist(a, b)if (xb-xa)*(yc-ya) == (yb-ya)*(xc-xa):print(-1)else:len_list = [la, lb, lc]print((max(len_list) - min(len_list)) * Decimal(2))cs 'Algorithm 문제' 카테고리의 다른 글
[백준] 14888 - 연산자 끼워넣기 (0) 2019.07.12 [백준] 17144 - 미세먼지 안녕! (0) 2019.07.08 [백준] 15954 - 인형들 (1) 2019.07.02 [백준] 1562 - 계단 수 (0) 2019.06.30 [백준] 3190 - 뱀 (0) 2019.06.30