얼렁뚱땅 백준 문제풀이

[백준 문제풀이] 얼렁뚱땅 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)