Home [BaekJoon] 1064 평행사변형 JAVA
Post
Cancel

[BaekJoon] 1064 평행사변형 JAVA

🔗 백준 1064 문제 https://www.acmicpc.net/problem/1064

문제

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

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

만들어진 모든 사각형 중 가장 큰 둘레 길이와 가장 작은 둘레 길이의 차이를 출력하는 프로그램을 작성하시오.

만약 만들 수 있는 평행사변형이 없다면 -1 을 출력한다.


입력

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


출력

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


풀이

일단.. 수학은 워낙 잘 모르기에 천천히 하나씩 TODO 리스트를 적어갔다.

  1. 평행사변형을 만들 수 없는 경우에는 -1을 출력
    • 3개의 점이 일직선 상에 위치한 경우 (즉, 직선의 기울기가 같은 경우)
  2. 좌표를 저장할 배열이 필요할것같다

  3. 배열에 저장된 3개의 값 중, 2개를 뽑아 더한 후 ×2를 한 것이 평행사변형의 둘레 길이 중 하나이다
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import java.io.*;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");

        Location[] arr = new Location[3];

        double[] len = new double[3];
        for(int i = 0; i < 3; i++){
            arr[i] = new Location(Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken()));
        }

        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 min = Double.MAX_VALUE, max = Double.MIN_VALUE;

            for (int j = 0; j < 3; j++) {
                len[j] = Math.sqrt(Math.pow(arr[j].x - arr[(j + 1) % 3].x, 2)
                        + Math.pow(arr[j].y - arr[(j + 1) % 3].y, 2));
            }

            for(int i = 0; i < 3; i++) {
                double sum = 0;
                sum += len[i];
                sum += len[(i + 1) % 3];

                if (sum > max) max = sum;
                if (sum < min) min = sum;
            }
            System.out.println(2 * max - 2 * min);
        }
    }
    static class Location {
        int x,y;

        public Location(int x, int y) {
            this.x = x; this.y = y;
        }
    }
}
This post is licensed under CC BY 4.0 by the author.