본문 바로가기

Algorithm

[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를 한 것이 평행사변형의 둘레 길이 중 하나이다

 

더보기
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;
        }
    }
}

'Algorithm' 카테고리의 다른 글

[BaekJoon] 1018 체스판 다시 칠하기 JAVA  (2) 2022.12.28
[BaekJoon] 1181 단어 정렬 JAVA  (0) 2022.12.23
[BaekJoon] 2034 반음 JAVA  (0) 2022.12.21
[BaekJoon] 1542 세준세비 JAVA  (0) 2022.12.20
[BaekJoon] 1032 명령프롬프트 JAVA  (0) 2022.12.20
Recent Posts
Popular Posts
Recent Comments