728x90
반응형
https://www.acmicpc.net/problem/1064
1064번: 평행사변형
평행사변형은 평행한 두 변을 가진 사각형이다. 세 개의 서로 다른 점이 주어진다. A(xA,yA), B(xB,yB), C(xC,yC) 이때, 적절히 점 D를 찾아서 네 점으로 평행사변형을 만들면 된다. 이때, D가 여러 개 나
www.acmicpc.net
문제 해결
- 3 점이 주어졌고 어떻게 연결하느냐에 따라 평행사변형 모양이 달라질 수 있다.
- 점 a, b, c가 있다고 하면 abc 연결과 acb연결은 다르다
- 만약 점이 일직선으로 있다면 평행사변형을 만들 수 없다.
- 따라서 그 경우는 -1.0을 출력하고 나머지 경우는 여러가지 연결을 해보고 가장 짧은 선분 합과 가장 긴 선분 합 차를 구하고 2배를 해주면 된다.
주의할 점
- 처음에 점의 평행을 Cos값을 통해 구할려고 했다.
- 하지만 이 경우 문제가 생기는 것이 있는데 바로 0.99999과 같은 1인데 무리수의 선분 길이등으로 인하여 나누기 계산을 할 때 어려움을 겪는 경우가 존재한다. 그래서 오답 채점으로 나오기도 한 것 같다.
- 최대한 계산을 할 때 나누기를 안쓰는 것이 좋은 것 같다. 최대한 곱셈으로 판별하도록 (조밀성이라고 표현하는 것 같다.)
CODE
import sys
input = sys.stdin.readline
import math
def solve(xa, ya, xb, yb, xc, yc):
if ((xa - xb) * (ya - yc) == (ya - yb) * (xa - xc)): # 직선 ab와 직선 ac가 평행 또는 일치할 때
return -1.0
ab = math.sqrt((xa - xb) ** 2 + (ya - yb) ** 2)
ac = math.sqrt((xa - xc) ** 2 + (ya - yc) ** 2)
bc = math.sqrt((xb - xc) ** 2 + (yb - yc) ** 2)
l = [ab+ac, ab+bc, ac+bc]
result = max(l)-min(l)
return 2*result
if __name__ == "__main__":
xa, ya, xb, yb, xc, yc = map(int, input().split())
answer = solve(xa, ya, xb, yb, xc, yc)
print(answer)
728x90
반응형
'알고리즘 > [python] 백준 BOJ' 카테고리의 다른 글
[python] 백준 2887 행성 터널 (1) | 2024.02.24 |
---|---|
[python] 백준 1750 서로소의 개수 (0) | 2024.02.22 |
[python] 백준 30677 반짝반짝 빛나는 별가루 (0) | 2024.02.19 |
[python] 백준 23258 밤편지 (0) | 2024.02.18 |
[python] 백준 2628 종이자르기 (0) | 2024.02.16 |
댓글