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

+ Recent posts