[BaekJoon] 1485 정사각형 (Java)

SeongWon Oh·2021년 10월 14일
0
post-thumbnail

🔗 문제 링크

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


📝 문제풀이 방법

정사각형임을 알기 위해서는 6개의 변의 길이를 모두 구한 뒤 4개의 같은 변과 2개의 같은 변이 있는 것을 확인해야한다.

나는 처음에는 4개의 변의 길이만 같으면 된다고 생각했으나 그럴 경우 마름모도 정사각형으로 인지하게된다.


👨🏻‍💻 작성한 코드

import java.io.*;
import java.util.*;

public class Main {

	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		int testCase = Integer.parseInt(br.readLine());
		
		StringTokenizer st;
		for (int i=0; i< testCase; i++) {
			ArrayList<Point> pointList = new ArrayList<>();
			for (int j=0; j<4; j++) {
				st = new StringTokenizer(br.readLine());
				int x = Integer.parseInt(st.nextToken());
				int y =Integer.parseInt(st.nextToken());
				pointList.add(new Point(x, y));
			}
			

			double[] len = new double[6];
			int count=0;
			for (int j=0; j<3; j++) {
				for (int k=j+1; k<4; k++) {
					if (j==0 && k==1) len[count++] = calculateDistance(pointList.get(j), pointList.get(k));
					else {
						len[count++] = calculateDistance(pointList.get(j), pointList.get(k));
					}
				}
			}
			boolean isSquare = true;
			
			//정사각형이면 변의 길이를 sort했을때 앞에 4개의 값은 4개의 변이 되고
			//뒤의 2개의 값은 대각선이 될 것이다. 
			Arrays.sort(len);
			// 4개의 변중 하나라도 다르면 정사각형 X
			for (int j=1; j<4; j++) {
				if (len[0] != len[j]) isSquare = false;
			}
			// 대각선의 길이가 같지 않으면 정사각형 X
			if (len[4]!=len[5]) isSquare = false;
			
			if (isSquare)
				bw.write(1 + "\n");
			else
				bw.write(0 + "\n");
		}
		bw.flush();
		bw.close();
		br.close();
		
	}
	static double calculateDistance(Point point1, Point point2) {
		int dx = point1.x - point2.x;
		int dy = point1.y - point2.y;
		return Math.sqrt(Math.pow(dx, 2)+Math.pow(dy, 2));
	}

}
class Point {
	int x; 
	int y;
	
	public Point (int x, int y) {
		this.x = x; 
		this.y = y;
	}
}

profile
블로그 이전했습니다. -> https://seongwon.dev/

0개의 댓글