얼렁뚱땅 백준 문제풀이
[백준 문제풀이] 얼렁뚱땅 2583 영역구하기 풀이
MOSTAR
2022. 9. 28. 11:02
https://www.acmicpc.net/problem/2583
2583번: 영역 구하기
첫째 줄에 M과 N, 그리고 K가 빈칸을 사이에 두고 차례로 주어진다. M, N, K는 모두 100 이하의 자연수이다. 둘째 줄부터 K개의 줄에는 한 줄에 하나씩 직사각형의 왼쪽 아래 꼭짓점의 x, y좌표값과 오
www.acmicpc.net
import sys
sys.setrecursionlimit(10000000)
n, m, num = map(int,input().split())
visited = [[0]*m for _ in range(n)]
for i in range(num) :
start_x, start_y, end_x, end_y = map(int,input().split())
for j in range(start_y,end_y) :
visited[j][start_x:end_x] = [1] * (end_x - start_x)
dx = [0, 0, 1, -1]
dy = [1, -1, 0, 0]
def dfs(x,y) :
global count
count += 1
visited[x][y] = 1
for i in range(4) :
nx = x + dx[i]
ny = y + dy[i]
if 0<=nx<n and 0<=ny<m :
if visited[nx][ny] == 0 :
dfs(nx,ny)
answer = []
many = 0
for i in range(n) :
for j in range(m) :
if visited[i][j] == 0 :
many += 1
count = 0
dfs(i,j)
answer.append(count)
answer.sort()
print(many)
print(*answer)