문제풀이/백준

[python/파이썬] 백준 2669 -직사각형 네개의 합집합의 면적 구하기(브1) / 2563 - 색종이(실5)

bbugi 2023. 1. 17. 14:31

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)