※ 글쓴이는 취미로 코딩을 익혀보는 사람이라 정확하지 않은 내용을 담고 있을 수 있다 ※

 

이번에 볼 문제는 백준 2527번 문제인 직사각형이다.
문제는 아래 링크를 확인하자.

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

 

2527번: 직사각형

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

www.acmicpc.net

각 직사각형의 영역은 상변을 나타내는 직선의 아래 영역, 하변을 나타내는 직선의 위쪽 영역, 좌변을 나타내는 직선의 오른쪽 영역, 우변을 나타내는 직선의 왼쪽 영역과 같은 네 영역의 교집합으로 생각할 수 있다. 따라서 두 직사각형의 겹치는 영역은 위와 같이 직사각형을 분석할 때의 여덟 영역의 교집합으로 생각할 수 있다.

 

해당 영역이 점으로 나타나는지 선으로 나타나는지 면으로 나타나는지 아니면 공집합으로 나타나는지를 판단해 문제를 해결하자.

 

아래는 제출한 소스코드이다.

#include <iostream>
using namespace std;

int X1, Y1, X2, Y2;
int A1, B1, A2, B2;
int main() {
	ios::sync_with_stdio(0);
	cin.tie(0);

	for (int i = 0; i < 4; i++) {
		cin >> X1 >> Y1 >> X2 >> Y2 >> A1 >> B1 >> A2 >> B2;

		int xL = max(X1, A1), yL = max(Y1, B1), xR = min(X2, A2), yR = min(Y2, B2);
		if (xL > xR || yL > yR) cout << 'd' << '\n';
		else if (xL == xR && yL == yR) cout << 'c' << '\n';
		else if (xL == xR || yL == yR) cout << 'b' << '\n';
		else cout << 'a' << '\n';
	}
}
728x90

+ Recent posts