[백준] 2527_직사각형
📕 문제
x2차원 격자공간에 두 개의 꼭짓점 좌표로 표현되는 직사각형이 있다. 직사각형은 아래와 같이 왼쪽 아래 꼭짓점 좌표 (x, y)와 오른쪽 위 꼭짓점 좌표 (p, q)로 주어진다.
이 문제에서 모든 직사각형은 두 꼭짓점의 좌표를 나타내는 4개의 정수 x y p q 로 표현된다. 단 항상 x<p, y<q 이다. 예를 들어 위 그림에 제시된 직사각형이라면 아래와 같이 표현된다.
3 2 9 8
두 개의 직사각형은 그 겹치는 부분의 특성에 따라 다음 4가지 경우로 분류될 수 있다.
먼저 두 직사각형의 겹치는 부분이 직사각형인 경우이다. 아래 그림(a)는 공통부분이 직사각형인 경우의 3가지 예를 보여준다,
또는 겹치는 부분이 아래 그림 (b)와 같이 선분이 될 수도 있고, 그림 (c)와 같이 점도 될 수 있다.
마지막으로 아래 그림 (d)와 같이 공통부분 없이 두 직사각형이 완전히 분리된 경우도 있다.
여러분은 두 직사각형의 겹치는 부분이 직사각형인지, 선분인지, 점인지, 아니면 전혀 없는 지를 판별해서 해당되는 코드 문자를 출력해야 한다.
공통부분의 특성코드 문자
직사각형 | a |
선분 | b |
점 | c |
공통부분이 없음 | d |
입력
4개의 줄로 이루어져 있다. 각 줄에는 8개의 정수가 하나의 공백을 두고 나타나는데, 첫 4개의 정수는 첫 번째 직사각형을, 나머지 4개의 정수는 두 번째 직사각형을 각각 나타낸다. 단 입력 직사각형의 좌표 값은 1이상 50,000 이하의 정수로 제한된다.
출력
4개의 각 줄에 주어진 두 직사각형의 공통부분을 조사해서 해당하는 코드 문자를 출력파일의 첫 4개의 줄에 각각 차례대로 출력해야 한다.
💡 풀이법
1. 먼저 p1과 x2로 경우의 수를 나누었다.
2. 입력에서 첫번째 사각형과 두번째 사각형 중 어떤게 x축에 더 가까운 사각형일지 모르기 때문에 리스트에 넣어서 정렬한 후, 무조건 첫번째 사각형이 x축과 가까운 사각형이 되도록 만들었다.
( 이렇게 하지 않으면 정말 많은 경우의 수를 생각해줘야 함😱)
3. 이후 각 경우의 수에서 더 세분화해서 경우의 수를 나누어 주었다.
for _ in range(4):
a, b, c, d, e, f, g, h = map(int, input().split())
lst = [(a, b, c, d), (e, f, g, h)]
lst.sort()
x1, y1, p1, q1 = lst[0]
x2, y2, p2, q2 = lst[1]
result = 'd'
if p1 > x2:
if y1 <= y2 < q1 or y1 < q2 <= q1 or (y2 < y1 and q2 > q1): # 겹치는 부분이 사각형
result = 'a'
elif y2 == q1 or q2 == y1: # 겹치는 부분이 선
result = 'b'
elif p1 == x2:
if y2 == q1 or q2 == y1: # 겹치는 부분이 꼭지점
result = 'c'
else: # 겹치는 부분이 선
result = 'b'
print(result)