사용한 알고리즘
알고리즘 설명
- 조건을 쉽게 만들기 위해서 다음 순서로 비교한다.
- 두 사각형이 겹치지 않는 조건을 먼저 확인한다.
- 두 사각형이 겹친다면 점으로 겹치는지 확인한다. 점으로 겹치는 조건은 상하좌우 양끝 모서리가 닿는 조건이다.
- 이후에 선으로 닿는 조건을 확인한다.
- 선, 점이 아니면 면으로 겹친다.
풀이
// 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;
}