728x90
문제 해결 흐름
1. 입력
- 3개의 점의 좌표 , , 를 입력받습니다.
2. 일직선 확인
- 주어진 3개의 점이 일직선상에 위치하는지 확인해야 합니다.
- 조건: 점 A, , C가 일직선상에 존재하면 평행사변형은 물론 사각형을 만들 수 없으므로 프로그램을 종료합니다.
- 기울기 공식 : 기울기(AB) = (y2 - y1) / (x2 - y1)
- 프로그래밍으로 나눗셈을 계산할 때는 부동소수점으로 인하여 계산이 정확하지 않습니다. 나눗셈을 사용하는 대신 곱셈 방식으로 변경하여 계산합니다.
- 나눗셈을 곱셈으로 변경: (x2−x1)⋅(y3−y1)=(x3−x1)⋅(y2−y1)
3. 거리 계산
- 점과 점 사이의 거리를 계산하기 위해 유클리드 거리 공식을 사용합니다
유클리드 거리(Euclidean Distance)란?
유클리드 거리는 두 점 사이의 "직선 거리"를 계산하는 수학적 공식입니다. 이 공식은 유클리드 공간에서 두 점 P(x1,y1)과 Q(x2,y2) 간의 거리를 다음과 같이 정의합니다:
4. 최대 둘레와 최소 둘레의 차 계산
- 가장 큰 둘레와 가장 짧은 둘레의 차는 결국 가장 긴 변과 짧은 변의 차의 * 2를 했을 때와 결과가 같습니다.
- 길이 구하기 : 2 * (max - min)
정답은 더보기 클릭
더보기
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int x1 = in.nextInt();
int y1 = in.nextInt();
int x2 = in.nextInt();
int y2 = in.nextInt();
int x3 = in.nextInt();
int y3 = in.nextInt();
// 세 점이 일직선에 있는 경우
if ((x2 - x1) * (y3 - y1) == (x3 - x1) * (y2 - y1)) {
System.out.println(-1);
return;
}
// 각 변의 길이를 계산
double ab = calculateEuclideanDistance(x1, y1, x2, y2);
double bc = calculateEuclideanDistance(x2, y2, x3, y3);
double ac = calculateEuclideanDistance(x1, y1, x3, y3);
// 최대, 최소 길이를 찾음
double max = Math.max(ab, Math.max(bc, ac));
double min = Math.min(ab, Math.min(bc, ac));
// 결과 출력
System.out.println(2 * (max - min));
}
// 두 점 사이의 유클리드 거리를 계산하는 메서드
private static double calculateEuclideanDistance(int x1, int y1, int x2, int y2) {
return Math.sqrt(Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2));
}
}
728x90
'백준' 카테고리의 다른 글
[백준] 요세푸스 문제(1158번): 커스텀 원형 연결 리스트로 해결하기 (2) | 2024.11.23 |
---|---|
[백준] 1, 2, 3 더하기 (2) | 2024.11.01 |
[백준] 연속합 (1912번) (0) | 2024.10.31 |
[백준] 토마토 (7576번) (0) | 2024.10.30 |
[백준] 부분합 (1806번) (0) | 2024.10.29 |