나의 풀이
두개의 직사각형의 두 꼭짓점의 좌표가 주어지고, 이를 통해 두 직사각형의 위치관계를 파악하는 문제였다. 처음에는 주어진 x1, y1, p1, q1, x2, y2, p2, q2 좌표를 그대로 사용했다가 12%
정도 채점 하다가 틀렸습니다
에러가 발생했다. 생각해보니 예제처럼 앞의 직사각형의 항상 원점에 가까운 것은 아닌 경우도 있다는 것을 생각하게 되었다. (예제에 이런 케이스를 더 추가해주면 좋겠지만 아쉽다..) 그래서 직사각형별로 tuple로 묶어서 먼저 정렬해준 뒤에 좌표 간 관계를 분석해보았다.
import sys
for _ in range(4):
x1, y1, p1, q1, x2, y2, p2, q2 = map(int, sys.stdin.readline().strip().split())
# 문제를 단순화해서 생각하자.
# 2차원을 x축 y축 방향으로 1차원으로 사영시켜서 해석!
r = sorted([(x1, y1, p1, q1), (x2, y2, p2, q2)])
# 앞의 직사각형이 원점에 가깝도록 정렬
if r[0][2] < r[1][0]:
print('d')
elif r[0][2] == r[1][0]:
if r[0][1] > r[1][3] or r[0][3] < r[1][1]:
print('d')
elif r[0][1] == r[1][3] or r[0][3] == r[1][1]:
print('c')
else:
print('b')
else:
if r[0][1] > r[1][3] or r[0][3] < r[1][1]:
print('d')
elif r[0][1] == r[1][3] or r[0][3] == r[1][1]:
print('b')
else:
print('a')
다른 사람들의 풀이도 구경해보았는데, 그 경우 정렬하지 않고 조건을 더 추가해서 풀어내는 경우가 많았다. 그런데 이 경우에 가독성이 떨어지고 코드를 재활용하기가 어려워지기 때문에 선호하지 않는 편이다. 내 풀이의 경우 elif r[0][2] == r[1][0]:
부분과 else:
부분의 내용이 거의 유사한데, 이처럼 코드를 재활용할 수 있다면 하는게 낫지 않을까?