현재 총 네 개의 직사각형을 입력 받고 각 행마다 두 점의 좌표를 입력 받고 있다.
행마다 입력받는 좌표들을 점 좌표가 아니라 이것이 직사각형을 구성하는 1x1인 하나의 박스 좌표들의 집합이라고 생각하고, 좌표평면을 행렬 표라고 생각하면 쉽게 풀 수 있다.
arr = [[0]*100 for _ in range(101)]
cnt = 0
for i in range(4):
x1, y1, x2, y2 = map(int, input().split())
for i in range(x1, x2):
for j in range(y1, y2):
if arr[i][j] == 0:
arr[i][j] += 1
cnt += 1
print(cnt)
입력 조건 중 모든 x, y 좌표가 1이상이고 100이하라고 했으므로 arr 배열을 100x100 크기로 할당한다.
(x2-x1)*(y2-y1) 크기의 한 직사각형에 대해서 꼭짓점을 이후는 두 점 사이의 거리인 (x2-x1)과 (y2-y1) 만큼 이중 반복문을 돌려 배열 arr의 값을 1만큼 1회 증가시키는 방식이다.
합집합의 면적을 구하는 것이므로 중복이 되면 안되기 때문에 if arr[i][j]==0 을 통해서 아직 거치지 않은 박스일 경우에만 값에 1을 더하도록 하였고, 동시에 면적을 의미하는 cnt 변수에도 1x1 크기의 박스 면적인 1을 더해준다.
반복문 실행 후 최종적으로 cnt 변수를 출력하면 이것이 바로 네 개 직사각형의 합집합 면적이 된다!
'Python' 카테고리의 다른 글
[백준/Python] 17626 : Four Squares (0) | 2024.09.29 |
---|---|
[백준/Python] 1051 : 숫자 정사각형 (0) | 2024.09.29 |
[백준/Python] 16931 : 겉넓이 구하기 (0) | 2024.09.22 |
[백준/Python] 1485 : 정사각형 (0) | 2024.09.22 |
[백준/Python] 1920 : 수 찾기 (0) | 2024.09.15 |