[백준] 1064 - 평행사변형
[백준] 1064 - 평행사변형

[백준] 1064 - 평행사변형

언어
Python
C++
난이도
Sliver 4
다시 풀어보기
다시 풀어보기
알고리즘 유형
구현
수학
작성자
박용성박용성
생성 일시
2024년 11월 10일

🖥 시작하며

보통 적절한 점 D 를 찾을 생각을 하겠지만, 여기서는 굳이 찾을 필요가 없다. 이미 세 개의 점이 주어졌으니, 어차피 둘레는 2(a + b) , 2(b + c) , 2(c + a) 가 될 것이다. 여기서 최대와 최소를 찾고 차이를 출력하면 된다.
notion image
 
또한 점 3개가 한 직선에 존재하다면, 즉 기울기가 동일하다면 문제 조건에 부합하지 않으므로, 이를 예외 처리한다. 아래 코드에서는 외적을 사용했다.
notion image

⚙️ 코드

import sys input = sys.stdin.readline if __name__ == "__main__": XA, YA, XB, YB, XC, YC = map(int, input().split()) answer = 0.0 # 기울기가 같다면 (외적 활용) if (XA - XB) * (YA - YC) == (YA - YB) * (XA - XC): answer = -1.0 else: dist_AB = ((XA - XB) ** 2 + (YA - YB) ** 2) ** 0.5 dist_BC = ((XB - XC) ** 2 + (YB - YC) ** 2) ** 0.5 dist_CA = ((XC - XA) ** 2 + (YC - YA) ** 2) ** 0.5 answer = (max(dist_AB, dist_BC, dist_CA) - min(dist_AB, dist_BC, dist_CA)) * 2 print(answer)
#include <algorithm> #include <cmath> #include <iomanip> #include <iostream> using namespace std; int main() { int XA, YA, XB, YB, XC, YC; cin >> XA >> YA >> XB >> YB >> XC >> YC; double answer = 0.0; // 기울기가 같은지 if ((XA - XB) * (YA - YC) == (YA - YB) * (XA - XC)) { answer = -1.0; } else { double dist_AB = sqrt(pow(XA - XB, 2) + pow(YA - YB, 2)); double dist_BC = sqrt(pow(XB - XC, 2) + pow(YB - YC, 2)); double dist_CA = sqrt(pow(XC - XA, 2) + pow(YC - YA, 2)); answer = (max({dist_AB, dist_BC, dist_CA}) - min({dist_AB, dist_BC, dist_CA})) * 2; } cout << fixed << setprecision(6) << answer << endl; return 0; }

📌 소감

수학!

댓글

guest