[백준]#1064 평행사변형

SeungBird·2020년 8월 26일
0

⌨알고리즘(백준)

목록 보기
17/401

문제

평행사변형은 평행한 두 변을 가진 사각형이다. 세 개의 서로 다른 점이 주어진다. A(xA,yA), B(xB,yB), C(xC,yC)

이때, 적절히 점 D를 찾아서 네 점으로 평행사변형을 만들면 된다. 이때, D가 여러 개 나올 수도 있다.

만들어진 모든 사각형 중 가장 큰 둘레 길이와 가장 작은 둘레 길이의 차이를 출력하는 프로그램을 작성하시오. 만약 만들 수 있는 평행사변형이 없다면 -1을 출력한다.

입력

첫째 줄에 xA yA xB yB xC yC가 주어진다. 모두 절댓값이 5000보다 작거나 같은 정수이다.

출력

첫째 줄에 문제의 정답을 출력한다. 절대/상대 오차는 10-9까지 허용한다.

예제 입력 1

0 0 0 1 1 0

예제 출력 1

0.8284271247461898

풀이

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc =new Scanner(System.in);
        Pair[] arr = new Pair[3];
        double min = Double.MAX_VALUE;
        double max = Double.MIN_VALUE;
        double[] leng = new double[3];
        for(int i=0; i<3; i++){
            arr[i] = new Pair(sc.nextInt(), sc.nextInt());
        }

        if((arr[1].y-arr[0].y)*(arr[2].x-arr[1].x)==(arr[1].x-arr[0].x)*(arr[2].y-arr[1].y))
            System.out.println("-1");

        else {
            double one = Math.sqrt(Math.pow(arr[1].y-arr[0].y, 2)+Math.pow(arr[1].x-arr[0].x, 2));
            double two = Math.sqrt(Math.pow(arr[2].y-arr[0].y, 2)+Math.pow(arr[2].x-arr[0].x, 2));
            double three = Math.sqrt(Math.pow(arr[2].y-arr[1].y, 2)+Math.pow(arr[2].x-arr[1].x, 2));
            leng[0] = one + two;
            leng[1] = two + three;
            leng[2] = one + three;

            for(int i=0; i<3; i++) {
                if(min>leng[i])
                    min=leng[i];
                if(max<leng[i])
                    max=leng[i];
            }

            System.out.println(2*max-2*min);
        }
    }
    static class Pair {
        int x;
        int y;

        public Pair(int x, int y) {
            this.x=x;
            this.y=y;
        }
    }
}
profile
👶🏻Jr. Programmer

0개의 댓글