백준/기하학
1485 정사각형
have a good time
2022. 6. 9. 21:08
1. 풀이
정사각형을 만들 수 있는지 구하라고 해서,
이런 경우만 생각했다.
하지만,
이런 경우도 정사각형이다.
회전 된 상태라고 생각하면 된다.
그래서 정사각형을 구할 때,
1) 네 변의 길이가 같은지
2) 대각선의 길이가 같은지
두 가지 경우를 확인해주면 된다.
즉, 네 변의 길이가 모두 같고,
2개의 대각선이 길이가 같다면 정사각형이다.
2. 최종 코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.StringTokenizer;
class Position{
int x;
int y;
Position(int x, int y) {
this.x = x;
this.y = y;
}
}
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
for(int i=0; i<T; i++) {
ArrayList<Position> input = new ArrayList<>();
for(int j=0; j<4;j++) {
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
input.add(new Position(Integer.parseInt(st.nextToken()), Integer.parseInt(st.nextToken())));
}
ArrayList<Double> length = new ArrayList<>();
for(int a=0; a<4; a++) {
for(int b=a+1; b<4; b++) {
double one = Math.pow(input.get(a).x - input.get(b).x, 2);
double two = Math.pow(input.get(a).y - input.get(b).y, 2);
double result = Math.sqrt(one + two);
length.add(result);
}
}
Collections.sort(length);
double value = length.get(0);
double value1 = 0;
int j = 0;
int answer = 1;
while(j<4) {
value1 = length.get(j);
if(value!= value1) {
answer = 0;
break;
}
j++;
}
value = length.get(4);
while(j>=4 && j<6) {
value1 = length.get(j);
if(value != value1) {
answer = 0;
break;
}
j++;
}
System.out.println(answer);
}
}
}
참고 블로그 :
백준 1485 자바 - 정사각형 (BOJ 1485 JAVA)
[ 문제 보기 ] [ 코드 보기(깃헙) ] [ 틀린 경우 ] 처음엔 아래와 같이 축에 평핸한 정사각형을 찾는줄 알았다. 그래서 예를들어 입력이 1 1 1 1 2 2 1 2 2 와 같다면, 사실 좌측이 x축인지 우측이 x축인
nahwasa.com