공부하기/백준

[Java] 백준 풀기 1485 - 정사각형

XEV 2023. 7. 22. 22:14

자바 백준 1485번

실버 3

https://www.acmicpc.net/problem/1485

 

1485번: 정사각형

첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스는 네 줄로 이루어져 있으며, 점의 좌표가 한 줄에 하나씩 주어진다. 점의 좌표는 -100,000보다 크거나 같고, 100,000보다 작거나 같

www.acmicpc.net

 

 

 

 

 

문제 보기

분류: 정렬, 기하학

 

 

 

 

 

문제 풀기

네 개의 점을 입력받고 두 점사이의 거리를 모두 계산하여 네 변과 두 대각선의 길이를 각각 비교하여 정사각형을 판단한다.

 

네 개의 좌표를 통해 총 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];
    }

}