https://www.acmicpc.net/problem/1064
1064번: 평행사변형
평행사변형은 평행한 두 변을 가진 사각형이다. 세 개의 서로 다른 점이 주어진다. A(xA,yA), B(xB,yB), C(xC,yC) 이때, 적절히 점 D를 찾아서 네 점으로 평행사변형을 만들면 된다. 이때, D가 여러 개 나
www.acmicpc.net
평행사변형의 길이를 구해보자.
맨 처음에는 해당하는 네 번째 점을 구하려했다.
그런데 생각해보니..? 오잉 안 구해도 길이는 알 수 있었다!
A, B, C 세 점이 있다면
평행사변형을 만들 때는 a, b, c 중 2개가 선택이 되어 변으로 사용이 된다.
각ABC를 선택하면 둘레는 a+b+a+b=a*2+b*2
각ACB를 선택하면 둘레는 c+b+c+b=b*2+c*2
각BAC를 선택하면 둘레는 a+c+a+c=a*2+c*2
따라서 최대둘레-최소둘레를 하고 싶다면? (Max(a,b,c)-Min(a,b,c))*2를 하면 쉽게 구할 수 있다.
그렇다면 평행사변형이 되지 않는 때는 언제일까? 바로 한 평행선 위에 세 점이 있을 때이다.
삼각형을 만들 수 없을 때! 라고 생각하여 (가장 큰 변)>=(나머지 변 합) 일때로 생각하여 조건문을 넘겼더니...
땡~
뭐지뭐지뭐지 라는 생각을 하다가 실수의 연산 때문에 틀릴 수도 있겠다는 생각을 하게 되었다!!
아무래도 제곱근을 구해놓았기 때문에 그 값이 컴퓨터에게는 다르다고 인식이 되었겠지 싶었다.
그래서 기울기를 구하는 방법으로 변경을 하였다... 힝
소수점이란 멀까...
Ğ̎ĭ̎t̆̎H̆̎ŭ̎b̆̎ : https://github.com/YunYunYY/BOJ_Java/blob/main/B1064.java
import java.io.*;
import java.util.Arrays;
import java.util.StringTokenizer;
public class B1064 {
public static void main(String[] args) throws IOException{
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer stt = new StringTokenizer(bf.readLine());
double[][] aa = new double[3][2];
double[]le = new double[3];
for(int i=0;i<3;i++)
for(int j=0;j<2;j++)
aa[i][j]=Integer.parseInt(stt.nextToken());
for(int i=0;i<3;i++)
le[i]=Math.sqrt(Math.pow(aa[i][0]-aa[(i+1)%3][0], 2)+
Math.pow(aa[i][1]-aa[(i+1)%3][1], 2));
Arrays.sort(le);
if((aa[1][0]-aa[0][0])*(aa[2][1]-aa[1][1])==(aa[2][0]-aa[1][0])*(aa[1][1]-aa[0][1]))
System.out.println(-1.0);
else
System.out.println((le[2]-le[0])*2);
}
}
'BOJ > Java' 카테고리의 다른 글
백준 Java : #2178 (0) | 2022.06.27 |
---|---|
백준 Java : #1002 (0) | 2022.05.11 |
Java : Lambda / stream+pipelining / Singleton (0) | 2022.04.01 |
백준 Java : #2217 (0) | 2022.03.31 |
백준 Java:#8595 (0) | 2022.03.22 |