티스토리 뷰

백준/실버

[백준 1064번] 평행사변형 (C++)

게임개발기원 2025. 4. 14. 20:40

문제링크 : https://www.acmicpc.net/problem/1064

#include <bits/stdc++.h>
using namespace std;

struct Point 
{
    double x, y;
};

double distance(Point a, Point b) //거리 구하기
{
    double dx = a.x - b.x;
    double dy = a.y - b.y;
    return sqrt(dx * dx + dy * dy);
}

bool isColinear(Point a, Point b, Point c)  //세 점이 일직선에 있는 지 체크
{
    return (b.x - a.x)*(c.y - a.y) == (b.y - a.y)*(c.x - a.x);
}

int main() 
{
    Point a, b, c;
    cin >> a.x >> a.y >> b.x >> b.y >> c.x >> c.y;

    if (isColinear(a, b, c)) 
    {
        cout << -1;
        return 0;
    }

    double ab = distance(a, b);
    double bc = distance(b, c);
    double ac = distance(a, c);

    //둘레 계산
    double p1 = 2 * (ab + bc);
    double p2 = 2 * (ab + ac);
    double p3 = 2 * (ac + bc);

    cout << fixed << setprecision(10) << max({p1, p2, p3}) - min({p1, p2, p3});

    return 0;
}

 

입력받은 좌표를 기준으로 우선 세 점이 일직선에 있는 지 체크한다.

외적 값을 통해 평행 여부를 판별한다.

 

이후 유클리디 거리 계산 공식을 통해 각 변의 거리를 구해주고, 이를 통해 둘레를 계산하게 된다.

다만 문제 조건에 따라 소수점 출력에 주의하여야 할 필요가 있다.

'백준 > 실버' 카테고리의 다른 글

[백준 14490번] 백대열 (C++)  (0) 2025.04.18
[백준 2312번] 수 복원하기 (C++)  (0) 2025.04.15
[백준 17087번] 숨바꼭질 6 (C++)  (0) 2025.04.13
[백준 2089번] -2진수 (C++)  (0) 2025.04.12
[백준 11576번] Base Conversion (C++)  (0) 2025.04.12
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함