๐Ÿ—๏ธ Algorithm/๐ŸŸฉ ๋ฐฑ์ค€

๐ŸŸฉ [๋ฐฑ์ค€] [Python] [BFS/DFS] 2583๋ฒˆ_์˜์—ญ ๊ตฌํ•˜๊ธฐ

Dbswnstjd 2022. 11. 17. 06:40

๋ฌธ์ œ

https://www.acmicpc.net/problem/2583

 

2583๋ฒˆ: ์˜์—ญ ๊ตฌํ•˜๊ธฐ

์ฒซ์งธ ์ค„์— M๊ณผ N, ๊ทธ๋ฆฌ๊ณ  K๊ฐ€ ๋นˆ์นธ์„ ์‚ฌ์ด์— ๋‘๊ณ  ์ฐจ๋ก€๋กœ ์ฃผ์–ด์ง„๋‹ค. M, N, K๋Š” ๋ชจ๋‘ 100 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜์ด๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ K๊ฐœ์˜ ์ค„์—๋Š” ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ์ง์‚ฌ๊ฐํ˜•์˜ ์™ผ์ชฝ ์•„๋ž˜ ๊ผญ์ง“์ ์˜ x, y์ขŒํ‘œ๊ฐ’๊ณผ ์˜ค

www.acmicpc.net

ํ’€์ด

# ๋ฐฑ์ค€ 2583๋ฒˆ ๋ฌธ์ œ - ์˜์—ญ ๊ตฌํ•˜๊ธฐ
from collections import deque
dx, dy = [0,0,-1,1], [1,-1,0,0]
m, n, k = map(int, input().split())
graph = [[0]*(n) for _ in range(m)]
for _ in range(k):
    x, y, x1, y1 = map(int, input().split())
    for i in range(y, y1):
        for j in range(x, x1):
            graph[i][j] = 1

area = 1
res = []
def bfs(a,b):
    queue = deque()
    queue.append((a,b))
    graph[a][b] = 1
    area = 1
    while queue:
        x, y = queue.popleft()
        for i in range(4):
            nx = x + dx[i]
            ny = y + dy[i]
            # ๋ฒ”์œ„ ์•ˆ์— ์žˆ๊ณ  ๊ทธ๋ž˜ํ”„๊ฐ€ 1์ด๊ณ  ๋ฐฉ๋ฌธ์„ ํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด 
            if 0<=nx<m and 0<=ny<n and graph[nx][ny] == 0:
                graph[nx][ny] = 1
                queue.append((nx,ny))
                area += 1
    return area
for i in range(m):
    for j in range(n):
        if graph[i][j] == 0: 
            res.append(bfs(i,j))
print(len(res))
res.sort()
for i in res:
    print(i, end=' ')