BOJ 2527 직사각형


사용한 알고리즘

  • 구현

알고리즘 설명

  • 조건을 쉽게 만들기 위해서 다음 순서로 비교한다.
  • 두 사각형이 겹치지 않는 조건을 먼저 확인한다.
  • 두 사각형이 겹친다면 점으로 겹치는지 확인한다. 점으로 겹치는 조건은 상하좌우 양끝 모서리가 닿는 조건이다.
  • 이후에 선으로 닿는 조건을 확인한다.
  • 선, 점이 아니면 면으로 겹친다.

풀이

// baekjoon 2527 yechan
#include <cstdio>
#include <algorithm>
using namespace std;

int x1, x2, y1, y2, p1, p2, q1, q2;

// 두 사각형이 겹치지 않는지 확인
bool checkOutSize() {
	if (p2 < x1) return true;
	if (p1 < x2) return true;
	if (q2 < y1) return true;
	if (q1 < y2) return true;
	return false;
}

// 한 점에서 겹치는 조건, 상하좌우 끝
bool checkDot() {
	if (x1 == p2 && q1 == y2) return true; // left top
	if (x1 == p2 && y1 == q2) return true; // left bottom
	if (p1 == x2 && q1 == y2) return true; // right top
	if (p1 == x2 && y1 == q2) return true; // right bottom
	return false;
}

// 선이 곂치는 조건 -> 점이 아닌 전제
bool checkLine() {
	if (x1 == p2) return true;
	if (q1 == y2) return true;
	if (p1 == x2) return true;
	if (y1 == q2) return true;
	return false;
}

int main() {
	for (int i=0; i<4; i++) {
		scanf("%d%d%d%d%d%d%d%d", &x1, &y1, &p1, &q1, &x2, &y2, &p2, &q2);
		if (checkOutSize()) puts("d");
		else if (checkDot()) puts("c");
		else if (checkLine()) puts("b");
		else puts("a");
	}
	return 0;
}



© 2020.08. by fbdp1202

Powered by theorydb