728x90
1. 문제
https://www.acmicpc.net/problem/2527
2. 풀이
겹치지않음->점->선분->겹침 순으로 파악하면 된다.
import java.io.*;
import java.util.*;
public class BOJ_2527_직사각형 {
private static int[] points;
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 4; i++) {
st = new StringTokenizer(in.readLine());
points = new int[8];
for (int p = 0; p < 8; p++) points[p] = Integer.parseInt(st.nextToken());
if (checkD()) sb.append("d");
else if (checkC()) sb.append("c");
else if (checkB()) sb.append("b");
else sb.append("a");
sb.append("\n");
}
System.out.print(sb);
}
private static boolean checkD() {
if (points[0] > points[6]) return true; //점Ax1 > 점 Bx2
if (points[2] < points[4]) return true; //점Ax2 < 점Bx1
if (points[1] > points[7]) return true; //점Ay1 > 점 By2
if (points[3] < points[5]) return true; //점Ay2 < 점By1
return false;
}
private static boolean checkC() {
if (points[0] == points[6] && points[1] == points[7]) return true; //A의 왼쪽아래점 = B의 오른쪽위점
if (points[0] == points[6] && points[3] == points[5]) return true; //A의 왼쪽위점 = B의 오른쪽아래점
if (points[2] == points[4] && points[3] == points[5]) return true; //A의 오른쪽아래점 = B 왼쪽위점
if (points[2] == points[4] && points[1] == points[7]) return true; //A의 오른쪽위점 = B의 왼쪽아래점
return false;
}
private static boolean checkB() {
if (points[0] == points[6]) return true; //A의 아랫변=B의 윗변
if (points[2] == points[4]) return true; //A의 윗변=B의 아랫변
if (points[1] == points[7]) return true; //A의 오른쪽변=B의 왼쪽변
if (points[3] == points[5]) return true; //A의 왼쪽변=B의 오른쪽변
return false;
}
}
3. 결과
경우의 수 파악이 조금 까다로웠다.
'코딩테스트 > BOJ' 카테고리의 다른 글
[BOJ] 1074 Z - JAVA (0) | 2022.02.16 |
---|---|
[BOJ] 10709 기상캐스터 - JAVA (0) | 2022.02.16 |
[BOJ] 2559 수열 - JAVA (0) | 2022.02.14 |
[BOJ] 2304 창고 다각형 - JAVA (0) | 2022.02.14 |
[BOJ] 1244 스위치 켜고 끄기 - JAVA (0) | 2022.02.13 |
댓글