https://www.acmicpc.net/problem/1064
문제
평행사변형은 평행한 두 변을 가진 사각형이다. 세 개의 서로 다른 점이 주어진다. A(xA,yA), B(xB,yB), C(xC,yC)
이때, 적절히 점 D를 찾아서 네 점으로 평행사변형을 만들면 된다. 이때, D가 여러 개 나올 수도 있다.
만들어진 모든 사각형 중 가장 큰 둘레 길이와 가장 작은 둘레 길이의 차이를 출력하는 프로그램을 작성하시오. 만약 만들 수 있는 평행사변형이 없다면 -1을 출력한다.
입력
첫째 줄에 xA yA xB yB xC yC가 주어진다. 모두 절댓값이 5000보다 작거나 같은 정수이다.
출력
첫째 줄에 문제의 정답을 출력한다. 절대/상대 오차는 10-9까지 허용한다.
풀이
평행사변형을 만들수 있는 경우의 수는
다음과 같이 3개의 경우가 있다
그래서 D 좌표를 미리 구한 후
해당 삼각형의 넓이를 모두 구해준 후 3개의 경우의 수 중 가장 큰 수에서 적은 수를 빼주었다!
수학 넘 오랜만인지 D 좌표를 찾는게 생각보다 오래 걸렸다
2개의 D 좌표를 찾을 수 있지만 둘레를 구하기 위해서는 2변의 길이만 알면 되기 때문에 2개중 하나의 좌표만 사용해서 둘레를 구해줄 수 있었다!
코드
# 1064 평행사변형
xa, ya, xb, yb, xc, yc = map(int,input().split())
if ((xa - xb) * (ya - yc) == (ya - yb) * (xa - xc)):
print(-1.0)
else:
xd2 = (xa + xc) - xb
yd2 = (ya + yc) - yb
cir_1 = (abs(xa - xb) ** 2 + abs(ya - yb) ** 2) ** 0.5 + (abs(xa - xc) ** 2 + abs(ya - yc) ** 2) ** 0.5
cir_2 = (abs(xa - xb) ** 2 + abs(ya - yb) ** 2) ** 0.5 + (abs(xa - xd2) ** 2 + abs(ya - yd2) ** 2) ** 0.5
cir_3 = (abs(xa - xc) ** 2 + abs(ya - yc) ** 2) ** 0.5 + (abs(xa - xd2) ** 2 + abs(ya - yd2) ** 2) ** 0.5
ans = max(cir_1, cir_2, cir_3) - min(cir_1, cir_2, cir_3)
print(ans*2)
'study > 백준' 카테고리의 다른 글
[백준] 2161. 카드1 : python (1) | 2022.12.08 |
---|---|
[백준] 1475. 방 번호 : python (0) | 2022.12.07 |
[백준] 4963. 섬의 개수 : python (1) | 2022.10.14 |
[백준] 2667. 단지번호붙이기 : python (0) | 2022.10.12 |
[백준] 1051. 숫자 정사각형 : python (0) | 2022.10.06 |