Notice
Recent Posts
Recent Comments
Link
코테 탈출일지
[백준] 2669번: 직사각형 네개의 합집합의 면적 구하기 - 파이썬/python 본문
https://www.acmicpc.net/problem/2669
2669번: 직사각형 네개의 합집합의 면적 구하기
평면에 네 개의 직사각형이 놓여 있는데 그 밑변은 모두 가로축에 평행하다. 이 네 개의 직사각형들은 서로 떨어져 있을 수도 있고, 겹쳐 있을 수도 있고, 하나가 다른 하나를 포함할 수도 있으
www.acmicpc.net
접근 방식
- 중복 영역에 대한 처리 방식 고민
코드 풀이
grid = [[0]*100 for _ in range(100)]
for _ in range(4):
a, b, c, d = map(int, input().split())
for i in range(a, c):
for j in range(b, d):
grid[i-1][j-1] = 1
cnt = 0 # 색칠된 grid 영역 count
for k in range(100):
cnt += sum(grid[k])
print(cnt)
직사각형 4개를 그릴 때 중복 영역에 대해서 직접 코드상으로 처리해준다면 3, 4개의 사각형이 동시에 겹치는 경우 처리가 매우 어려워질 수 있습니다. 따라서 범위 영역에 대해 grid를 설정하여 색칠해주는 방식으로 진행했습니다. (1로 처리하므로, 이미 처리되어 있어 중복 처리되더라도 값이 변하지 않습니다.)
이때 주의해야 할 점은 왼쪽 하단 좌표는 grid에 1 처리해주지만, 오른쪽 상단 좌표는 grid에 1처리하지 않는 것입니다. 즉 범위 내 좌표가 영역의 좌하단에 위치할때만 grid에 1을 처리하는 것입니다 (a<= i < c, b<= j < d)
메모
- 이중 list 구문은 sum(list) 처리로 원소의 합을 구할 수 없습니다. 세부 리스트의 sum값을 더해주는 방식으로 접근해줘야 합니다.
'구현' 카테고리의 다른 글
[백준] 1966번: 프린터 큐 - 파이썬/python (0) | 2023.07.18 |
---|---|
[백준] 1652번: 누울 자리를 찾아라 - 파이썬/python (0) | 2023.07.16 |
[백준] 1476번: 날짜 계산 - 파이썬/python (0) | 2023.07.16 |
[백준] 2740번: 행렬 곱셈 - 파이썬/python (0) | 2023.07.16 |
[백준] 1193번: 분수찾기 - 파이썬/python (0) | 2023.07.09 |