[백준] 2669번 직사각형 네개의 합집합의 면적 구하기 Python

Eun-jeong Park·2023년 1월 30일
0

알고리즘

목록 보기
3/7

https://www.acmicpc.net/problem/2669

문제

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

입력

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

출력

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

코드

matrix = [[0] * 100 for _ in range(100)]
result = 0

for _ in range(4):
    x1, y1, x2, y2 = map(int, input().split()) # 1 2 4 4 
    for i in range(y1, y2): # 2, 4 
        for j in range(x1, x2): # 1, 4
            matrix[i][j] = 1

for k in matrix:
    result += sum(k)
print(result)

코드 리뷰

  • 입력 조건에서 x, y좌표가 100이하인 정수라고 했기 때문에,
    이중리스트 matrix를 요소를 0으로 넣고 100 by 100 크기로 선언해준다.
  • 아래 <사진1>과 같이 색칠한 부분이 해당되는 입력된 좌표값들로 그린 직사각형이다.
  • 좌표평면을 행렬의 칸을 나눠서 색칠된 부분을 1칸이라고하면 그 칸 수를 모두 센 게 합집합의 면적이다.
  • 입력 받은 x, y좌표를 matrix에 해당되는 부분에 1을 넣어준다. (중복되도 상관없이 1이다.) matrix의 초기값이 0이기 때문에 색칠된 부분만 1 넣어주면 된다.
  • matrix에 전부 색칠된 값을 1로 넣어준다음, matrix의 요소값을 전부 합해야하는데, 이중리스트는 sum()에 바로 넣어서 계산이 안되기 때문에
    for문을 사용해서 이중리스트 안에 있는 1차원 리스트를 각각 접근한 다음에 sum(1차원리스트) 해주고, result에 계속 더해주면 값이 구해진다.

    <사진1>

느낀점

고민을 많이 한 문제인데, 결국 해결해서 너무 행복했다...ㅠㅠㅠ
짜식..오늘 처음으로 이중리스트를 써봤는데 이 문제를 풀면서 이중리스트에 대해서 많이 이해할 수 있었다!! 이중리스트 개념 조금 더 공부하고 더 심화된 문제를 풀어보고 싶다.

profile
지구를 사랑하는 개발자

0개의 댓글