Study/Baekjoon

[Python] Baekjoon2669: 직사각형 네개의 합집합의 면적 구하기

devyoseph 2022. 1. 26. 00:47

직사각형 네개의 합집합의 면적 구하기

1 초 128 MB 5713 4342 3883 76.906%

문제

평면에 네 개의 직사각형이 놓여 있는데 그 밑변은 모두 가로축에 평행하다. 이 네 개의 직사각형들은 서로 떨어져 있을 수도 있고, 겹쳐 있을 수도 있고, 하나가 다른 하나를 포함할 수도 있으며, 변이나 꼭짓점이 겹칠 수도 있다.

이 직사각형들이 차지하는 면적을 구하는 프로그램을 작성하시오.

입력

입력은 네 줄이며, 각 줄은 직사각형의 위치를 나타내는 네 개의 정수로 주어진다. 첫 번째와 두 번째의 정수는 사각형의 왼쪽 아래 꼭짓점의 x좌표, y좌표이고 세 번째와 네 번째의 정수는 사각형의 오른쪽 위 꼭짓점의 x좌표, y좌표이다. 모든 x좌표와 y좌표는 1이상이고 100이하인 정수이다.

출력

첫 줄에 네개의 직사각형이 차지하는 면적을 출력한다.

주의점

주어진 것은 좌표지만 좌표와 사각형의 넓이를 구하는 것은 다릅니다. 좌표의 개수와 넓이는 같지 않습니다.

풀이1: Set 활용

데이터 구조 Set을 활용해 풀이할 수 있습니다. 중복이 자동으로  제거되기 때문입니다.

area = set()
for rec in range(4):
    lst = list(map(int,input().split()))
    for x in range(lst[0],lst[2]):
        for y in range(lst[1],lst[3]):
            area.add((x,y))
print(len(area))

 

풀이2: 2차원 리스트 활용

2차원 리스트를 만들어 중복값을 걸러줄 수 있습니다

2차원 리스트 만들기

area = [[0 for i in range(101)] for j in range(101)]

전체 코드

area = [[0 for i in range(101)] for j in range(101)]
total = 0
for rec in range(4):
    lst = list(map(int,input().split()))
    for x in range(lst[0],lst[2]):
        for y in range(lst[1],lst[3]):
            if area[x][y] == 0:
                total +=1
                area[x][y] = 1
print(total)