백준 2527번 문제 바로가기

나의 풀이

두개의 직사각형의 두 꼭짓점의 좌표가 주어지고, 이를 통해 두 직사각형의 위치관계를 파악하는 문제였다. 처음에는 주어진 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: 부분의 내용이 거의 유사한데, 이처럼 코드를 재활용할 수 있다면 하는게 낫지 않을까?