For Programmer

백준 2527번 파이썬 문제풀이(직사각형) 본문

코팅테스트/백준 문제 모음

백준 2527번 파이썬 문제풀이(직사각형)

유지광이 2022. 1. 30. 02:48
728x90


처음 문제를 풀려고 할때 너어렵게 생각해서 조건을 수없이 많이 분기했다. 그랬더니 코드만 복잡해지고 너무 어려워졌다. 이 문제는 단순히 쉽게 생각하는게 답인거 같다.

 

1st. 두 직사각형이 만나지 않을 때를 생각한다.

2nd. 두 직사각형이 한점에서 만날 때를 생각한다.

3th. 두 직사각형이 한 변에서 만날 때를 생각한다.

4th. 두 직사각형이 내부 직사각형을 만들 때를 생각한다.

 

위와 같은 순서로 조건을 짠다면 모든 예외를 막을 수 있다.

def solution(left_square, right_square):
    x1, y1, x2, y2 = left_square[0], left_square[1], left_square[2], left_square[3]
    p1, q1, p2, q2 = right_square[0], right_square[1], right_square[2], right_square[3]

    # 공통부분 없음
    if (x2 < p1) or (p2 < x1) or (q1 > y2) or (y1 > q2):
        return "d"

    # 점 1개에서 만날 때
    if (x2 == p1 and y2 == q1) or (x2 == p1 and y1 == q2) or (x1 == p2 and y1 == q2) or (x1 == p2 and y2 == q1):
        return "c"

    # 변이 만날 때
    if p1 == x2 or x1 == p2 or y1 == q2 or y2 == q1:
        return "b"

    # 나머지 직사각형(겹칠때)
    return "a"


for _ in range(4):
    temp = list(map(int, input().split()))
    left_square = [temp[i] for i in range(4)]  # 왼쪽 직사각형
    right_square = [temp[i] for i in range(4, 8)]  # 오른쪽 직사각형
    print(solution(left_square, right_square))

 

728x90
Comments