Algorithm/BOJ

BOJ 2527 직사각형

wow 2021. 3. 8. 20:48

문제 분석

- StringBuilder를 사용하면 오류가 나는 문제다. 

- 각 경우(a,b,c,d)에 따라 조건 설정에 유의해야 한다.

 

 

문제 풀이

1) 안겹치는 경우

- 직사각형1에 대해 상하좌우 방향 모두 안겹칠 경우를 계산한다.

2) 점으로 겹치는 경우

- 직사각형1에 대해 좌우 방향 중 한 곳이 겹칠 때 상하 방향이 겹쳐야할 경우로 계산한다.

3) 선으로 겹치는 경우

- 점으로 겹치는 경우가 제외되기때문에 4방향 중 아무 곳이나 겹치는 경우를 계산한다.

4) 아예 겹쳐서 직사각형이 생성되는 경우

-  else처리해준다.

 

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main {

	public static void main(String[] args) throws Exception {

		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;

		for (int i = 0; i < 4; i++) {
			st = new StringTokenizer(br.readLine());
			int x1 = Integer.parseInt(st.nextToken());
			int y1 = Integer.parseInt(st.nextToken());
			int p1 = Integer.parseInt(st.nextToken());
			int q1 = Integer.parseInt(st.nextToken());
			int x2 = Integer.parseInt(st.nextToken());
			int y2 = Integer.parseInt(st.nextToken());
			int p2 = Integer.parseInt(st.nextToken());
			int q2 = Integer.parseInt(st.nextToken());

			if (p1 < x2 || p2 < x1 || q2 < y1 || q1 < y2) { // 안겹치는 경우
				System.out.println("d");
			} else if ((p1 == x2 || x1 == p2) && (y1 == q2 || y2 == q1)) { // 점으로 겹치는 경우
				System.out.println("c");
			} else if ((p1 == x2 || x1 == p2) || (y1 == q2 || y2 == q1)) {// 선으로 겹치는 경우
				System.out.println("b");
			} else {
				System.out.println("a");
			}
		}
	}// main

}// class-end