자바 백준 1485번
실버 3
https://www.acmicpc.net/problem/1485
문제 보기
분류: 정렬, 기하학
문제 풀기
네 개의 점을 입력받고 두 점사이의 거리를 모두 계산하여 네 변과 두 대각선의 길이를 각각 비교하여 정사각형을 판단한다.
네 개의 좌표를 통해 총 6가지의 두 점 사이의 거리를 찾을 수 있다. 이 결과를 오름차순 정렬하여 짧은 4개가 같고 긴 2개가 같으면 정사각형 조건임을 이용한다.
코드 보기
import java.util.Scanner;
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int T = sc.nextInt();
for (int t = 0; t < T; t++) {
int x1 = sc.nextInt();
int y1 = sc.nextInt();
int x2 = sc.nextInt();
int y2 = sc.nextInt();
int x3 = sc.nextInt();
int y3 = sc.nextInt();
int x4 = sc.nextInt();
int y4 = sc.nextInt();
// 정사각형을 만들 수 있는지 확인하고 결과 출력
int result = canFormSquare(x1, y1, x2, y2, x3, y3, x4, y4) ? 1 : 0;
System.out.println(result);
}
}
// 두 점 사이의 거리를 계산하는 함수
private static double distance(int x1, int y1, int x2, int y2) {
return Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));
}
// 네 점으로 정사각형을 만들 수 있는지 확인하는 함수
private static boolean canFormSquare(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4) {
// 모든 두 점 사이의 거리를 구하여 오름차순 정렬
double[] distancesArr = new double[6];
distancesArr[0] = distance(x1, y1, x2, y2);
distancesArr[1] = distance(x1, y1, x3, y3);
distancesArr[2] = distance(x1, y1, x4, y4);
distancesArr[3] = distance(x2, y2, x3, y3);
distancesArr[4] = distance(x2, y2, x4, y4);
distancesArr[5] = distance(x3, y3, x4, y4);
Arrays.sort(distancesArr);
// System.out.println(Arrays.toString(distancesArr)); // TEST PRINT
// 네 변의 길이가 같고 두 대각선의 길이가 같은지 확인
return distancesArr[0] == distancesArr[1]
&& distancesArr[1] == distancesArr[2]
&& distancesArr[2] == distancesArr[3]
&& distancesArr[4] == distancesArr[5];
}
}
'공부하기 > 백준' 카테고리의 다른 글
[Java] 백준 풀기 11653 - 소인수분해 (0) | 2023.07.24 |
---|---|
[Java] 백준 풀기 2609 - 최대공약수와 최소공배수 (0) | 2023.07.23 |
[Java] 백준 풀기 15904 - UCPC는 무엇의 약자일까? (0) | 2023.07.21 |
[Java] 백준 풀기 11652 - 카드 (0) | 2023.07.20 |
[Java] 백준 풀기 11557 - Yangjojang of The Year (0) | 2023.07.19 |