코딩테스트/BOJ

[BOJ] 2527 직사각형 - JAVA

5월._. 2022. 2. 16.
728x90

1. 문제

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

 

2527번: 직사각형

4개의 줄로 이루어져 있다. 각 줄에는 8개의 정수가 하나의 공백을 두고 나타나는데, 첫 4개의 정수는 첫 번째 직사각형을, 나머지 4개의 정수는 두 번째 직사각형을 각각 나타낸다. 단 입력 직사

www.acmicpc.net


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

댓글