작심삼일

[LeetCode] 223 | Rectangle Area | Python 본문

스터디/코테

[LeetCode] 223 | Rectangle Area | Python

yun_s 2022. 11. 17. 09:30
728x90
반응형

문제 링크: https://leetcode.com/problems/rectangle-area/


문제

Given the coordinates of two rectilinear rectangles in a 2D plane, return the total area covered by the two rectangles.

The first rectangle is defined by its bottom-left corner (ax1, ay1) and its top-right corner (ax2, ay2).

The second rectangle is defined by its bottom-left corner (bx1, by1) and its top-right corner (bx2, by2).


조건

  • $-10^4$ <= ax1 <= ax2 <= $10^4$
  • $-10^4$ <= ay1 <= ay2 <= $10^4$
  • $-10^4$ <= bx1 <= bx2 <= $10^4$
  • $-10^4$ <= by1 <= by2 <= $10^4$

내 풀이

직사각형 두 개의 넓이를 더한 뒤 겹치는 부분의 넓이를 빼면 된다.

겹치는 부분의 넓이는, 아래 twice의 식을 이용한다.

min(ax2,bx2) - max(ax1,bx1)는 직사각형이 겹치는 부분이 있을 때 양수로 나오고, 그렇지 않다면 음수가 나올 것이다.

그렇기때문에 max(~, 0)으로 한번 감싸준다.


코드

class Solution:
    def computeArea(self, ax1: int, ay1: int, ax2: int, ay2: int, bx1: int, by1: int, bx2: int, by2: int) -> int:
        rec1 = (ax2 - ax1) * (ay2 - ay1)
        rec2 = (bx2 - bx1) * (by2 - by1)
        twice = max(min(ax2,bx2) - max(ax1,bx1),0) * max(min(ay2,by2) - max(ay1,by1),0)
        
        return rec1 + rec2 - twice
728x90
반응형
Comments