본문 바로가기

백준

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

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