728x90
1. 문제
평행사변형은 평행한 두 변을 가진 사각형이다. 세 개의 서로 다른 점이 주어진다. A(xA,yA), B(xB,yB), C(xC,yC)
이때, 적절히 점 D를 찾아서 네 점으로 평행사변형을 만들면 된다. 이때, D가 여러 개 나올 수도 있다.
만들어진 모든 사각형 중 가장 큰 둘레 길이와 가장 작은 둘레 길이의 차이를 출력하는 프로그램을 작성하시오. 만약 만들 수 있는 평행사변형이 없다면 -1을 출력한다.
2. 풀이
1. 세 점이 일직선을 이루는 경우는 -1을 출력한다.
2. AB 길이, BC 길이, CA길이를 모두 구한다.
3. 세 선분 중 가장 큰 선분, 가장 작은 선분의 차를 이용해 답을 출력한다. 둘레의 길이이므로 *2를 해야한다.
import java.io.*;
import java.util.*;
public class BOJ_1064_평행사변형 {
public static void main(String[] args) throws IOException {
StringTokenizer st = new StringTokenizer(new BufferedReader(new InputStreamReader(System.in)).readLine());
int[] points = new int[6];
for(int i=0;i<6;i++) points[i] = Integer.parseInt(st.nextToken());
if((points[2]-points[0])*(points[5]-points[1])==(points[4]-points[0])*(points[3]-points[1])){
System.out.println(-1);
return;
}
double ab = getLength(points[0],points[1],points[2],points[3]);
double bc = getLength(points[2],points[3],points[4],points[5]);
double ca = getLength(points[4],points[5],points[0],points[1]);
double max = Math.max(ab,Math.max(bc,ca));
double min = Math.min(ab,Math.min(bc,ca));
System.out.println(2*(max-min));
}
public static double getLength(double x1, double y1, double x2, double y2){
return Math.sqrt(Math.pow(x1-x2,2)+Math.pow(y1-y2,2));
}
}
3. 결과
'코딩테스트 > BOJ' 카테고리의 다른 글
[BOJ] 1141 접두사 - JAVA (0) | 2022.06.23 |
---|---|
[BOJ] 1059 좋은 구간 - JAVA (0) | 2022.06.22 |
[BOJ] 1057 토너먼트 - JAVA (0) | 2022.06.20 |
[BOJ] 1246 온라인 판매 - JAVA (0) | 2022.06.19 |
[BOJ] 1206 사람의 수 - JAVA (0) | 2022.06.17 |
댓글