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

입력
입력은 네 줄이며, 각 줄은 직사각형의 위치를 나타내는 네 개의 정수로 주어진다. 첫 번째와 두 번째의 정수는 사각형의 왼쪽 아래 꼭짓점의 x좌표, y좌표이고 세 번째와 네 번째의 정수는 사각형의 오른쪽 위 꼭짓점의 x좌표, y좌표이다. 모든 x좌표와 y좌표는 1이상이고 100이하인 정수이다.
출력
첫 줄에 네개의 직사각형이 차지하는 면적을 출력한다.
문제링크
https://www.acmicpc.net/problem/2669
2669번: 직사각형 네개의 합집합의 면적 구하기
평면에 네 개의 직사각형이 놓여 있는데 그 밑변은 모두 가로축에 평행하다. 이 네 개의 직사각형들은 서로 떨어져 있을 수도 있고, 겹쳐 있을 수도 있고, 하나가 다른 하나를 포함할 수도 있으
www.acmicpc.net
답안
# 예전 답안
paper = [[0]*101 for _ in range(101)]
for _ in range(4):
square = list(map(int, input().split()))
for j in range(square[1], square[3]):
for i in range(square[0], square[2]):
paper[i][j] = 1
answer = 0
for num in paper:
answer += num.count(1)
print(answer)
개선 답안
# 현재 답안
paper = [[0]*101 for _ in range(101)]
answer = 0
for _ in range(4):
x1, y1, x2, y2 = map(int, input().split())
for i in range(x1, x2):
for j in range(y1, y2): # 리스트를 순회하며, 그 값이 0이라면 1로 바꿔주고
if not paper[i][j]: # answer += 1
paper[i][j] = 1
answer += 1
print(answer) # 한번씩만 순회하면 된다.
후기
1달 전에 작성한 코드는 2중포문을 4번 순회해서 paper를 만들고, 만든 paper를 다시 순회해서 1의 값을 찾는 코드이다.
현재 개선한 코드는 2중포문을 4번 순회하면서, i,j가 체크된적 없었던 좌표라면 answer에 += 1를 해줘서 한번씩만 순회하고 답을 구하는 코드이다.
가독성도 조금 좋아졌다.1달전의 나보단 발전한게 체감된다. 킵고잉,,,,
728x90
'파이썬 코딩테스트' 카테고리의 다른 글
백준 1244번 - 스위치 켜고 끄기 (파이썬/Python) (0) | 2024.03.09 |
---|---|
백준 2635번 - 수 이어가기 (파이썬/Python) (0) | 2024.03.08 |
백준 2667번 - 단지번호붙이기 (파이썬/Python) (2) | 2024.03.06 |
백준 13305번 - 주유소 (파이썬/Python) (2) | 2024.03.05 |
백준 2869번 - 달팽이는 올라가고 싶다 (파이썬/Python) (0) | 2024.03.04 |