BOJ/Silver

[BOJ] #1064 평행사변형

Opal1031 2026. 4. 13. 11:33

평행사변형

백준 #1064


📌 문제

예제 입력

0 0 0 1 1 0

예제 출력

0.8284271247461898

📌 풀이

Logic

  • 세 개의 서로 다른 점 좌표 입력 받기
  • 평행사변형 여부 확인
    • 세 점이 한 직선 위에 있으면 불가능 <-- '-1' 출력
  • 세 가지 평행선 및 둘레 구하기
  • 최대 둘레 차이 출력
# 변수명
Xa, Ya, Xb, Yb, Xc, Yc : 주어진 세 점의 좌표
dist : 빗변 길이 함수
circum : 가능한 평행사변형의 둘레

Python

import sys
import math

Xa, Ya, Xb, Yb, Xc, Yc = map(int, sys.stdin.readline().split())

if ((Xa * (Yb - Yc) + Xb * (Yc - Ya) + Xc * (Ya - Yb)) == 0):
    print(-1)
    sys.exit()

def dist(x1, y1, x2, y2):
    return math.hypot(x1 - x2, y1 - y2)

a = dist(Xa, Ya, Xb, Yb)
b = dist(Xb, Yb, Xc, Yc)
c = dist(Xc, Yc, Xa, Ya)

circum = [2 * (a + b), 2 * (b + c), 2 * (c + a)]

circum.sort()

print((circum[-1] - circum[0]))

✏️ 새로운 내용

hypot()

두 선분이 주어졌을 때 빗변을 구함

dis = math.hypot(1, 1)    # 1.414

📚 회고

💡 hypot

  • 처음에는 빗변을 구하기 위해 네 개의 점 좌표를 이용하고, 직접 제곱·루트를 계산하는 복잡한 방식을 사용했다.
  • hypot처럼 간단히 처리할 수 있는 함수도 있다는 것을 알았다.
  • 비교적 지엽적인 함수들은 “있다” 정도만 알고 넘어가도 충분하다고 생각한다.

'BOJ > Silver' 카테고리의 다른 글

[BOJ] #16173 점프왕 쩰리 (Small)  (0) 2026.04.13
[BOJ] #1002 터렛  (0) 2026.04.13
[BOJ] #9012 괄호  (0) 2026.04.13
[BOJ] #18110 solved.ac  (0) 2026.04.13
[BOJ] #11441 합 구하기  (0) 2026.04.13