https://www.acmicpc.net/problem/2669
2669번: 직사각형 네개의 합집합의 면적 구하기
평면에 네 개의 직사각형이 놓여 있는데 그 밑변은 모두 가로축에 평행하다. 이 네 개의 직사각형들은 서로 떨어져 있을 수도 있고, 겹쳐 있을 수도 있고, 하나가 다른 하나를 포함할 수도 있으
www.acmicpc.net
https://www.acmicpc.net/problem/2563
2563번: 색종이
첫째 줄에 색종이의 수가 주어진다. 이어 둘째 줄부터 한 줄에 하나씩 색종이를 붙인 위치가 주어진다. 색종이를 붙인 위치는 두 개의 자연수로 주어지는데 첫 번째 자연수는 색종이의 왼쪽 변
www.acmicpc.net
그래프 위의 면적 구하기 (구현)
---
2669번과 2563번 문제 접근방식이 동일하여
함께 정리
---
전체 범위를 0으로 채워진 2차원 배열로 만들어 해당하는 부분에 1로 채워주기
전체 배열의 1을 더해주면 색칠된 부분의 넓이
[ 2669 - 직사각형 네개의 합집합의 면적 구하기 ]
# 직사각형 네개의 합집합의 면적 구하기 (브1)
import sys
input = sys.stdin.readline
full = [[0] * 100 for i in range(100)]
result = 0
for _ in range(4):
temp = list(map(int, input().split()))
# print(temp)
for i in range(temp[0], temp[2]):
for j in range(temp[1], temp[3]):
# print(i, j)
if full[i][j] == 0:
full[i][j] = 1
result += 1
else:
pass
print(result)
[ 2563 - 색종이 ]
# 색종이 (실5)
import sys
input = sys.stdin.readline
paper = [[0]*100 for _ in range(100)]
count = 0
for _ in range(int(input())):
x, y = map(int, input().split())
for i in range(x, x+10):
for j in range(y, y+10):
if paper[i][j] != 1:
paper[i][j] = 1
count += 1
else:
pass
print(count)
[ 색종이 초기 풀이법 ]
n = int(input())
# 100 x 100 배열 만들기
full = []
for _ in range(100):
row = list(map(int, range(100)))
full.append(row)
# 배열 안의 값 0으로 변경
for a in range(100):
for b in range(100):
full[a][b] = 0
# 색종이 넓이 구하기
for _ in range(n):
x, y = map(int, input().split())
for i in range(x-1, x+9):
for j in range(y-1, y+9):
full[i][j] = 1
# 2차원 배열일때 덧셈
sum = 0
for row in range(len(full)):
for col in range(len(full[row])):
sum = sum + full[row][col]
print(sum)
'문제풀이 > 백준' 카테고리의 다른 글
[python/파이썬] 백준 2775 - 부녀회장이 될테야(브1) (1) | 2023.01.29 |
---|---|
[python/파이썬] 백준 10828 - 스택(실4) (0) | 2023.01.18 |
[python/파이썬] 백준 4673 - 셀프 넘버(실5) (0) | 2023.01.15 |
[python/파이썬] 백준 2161 - 카드1(실5) (0) | 2023.01.15 |
[python/파이썬] 백준 10814 - 나이순 정렬(실5) (0) | 2023.01.15 |