[๋ฐฑ์ค€-2583] ์˜์—ญ ๊ตฌํ•˜๊ธฐ / Python

๐Ÿ“š Problem Solving/Baekjoon

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

 

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

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

www.acmicpc.net

from collections import deque

m, n, k = map(int, input().split())
graph = [[0] * n for i in range(m)]

dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]

l = []

for i in range(k):
    x1, y1, x2, y2 = map(int, input().split())
    for j in range(x1, x2):
        for k in range(y1, y2):
            graph[k][j] = 1


def bfs(x, y):
    queue = deque()
    queue.append([x, y])
    graph[x][y] = 1
    cnt = 1
    while queue:
        x, y = queue.popleft()
        for i in range(4):
            nx = x + dx[i]
            ny = y + dy[i]
            if 0 <= nx < m and 0 <= ny < n:
                if graph[nx][ny] == 0:
                    graph[nx][ny] = 1
                    cnt += 1
                    queue.append([nx, ny])
    l.append(cnt)


for i in range(m):
    for j in range(n):
        if graph[i][j] == 0:
            bfs(i, j)

print(len(l))
l.sort()
print(*l)

 

ํ•ด์„ค

๊ทธ๋ž˜ํ”„์ด๋ก  ๋ถ„๋ฅ˜๋กœ ๋“ค์–ด๊ฐ€์„œ ํ”ฝํ•œ ๋ฌธ์ œ์˜€๋Š”๋ฐ ๋‹จ์ˆœํ•œ BFS ๋ฌธ์ œ์˜€๋‹ค. ์—ฌํƒœ๊นŒ์ง€ ๊ทธ๋ž˜ํ”„ ๊ด€๋ จ ๋ฌธ์ œ๋Š” ๋Œ€๋ถ€๋ถ„ BFS๋‚˜ ๋‹ค์ต์ŠคํŠธ๋ผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ฒƒ ๊ฐ™์•˜๋‹ค.

์ด ๋ฌธ์ œ์—์„œ ์ฑ„์›Œ์ ธ์žˆ๋Š” ์ง์‚ฌ๊ฐํ˜•์„ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ• ๊นŒ ์ž ๊น ๊ณ ๋ฏผํ–ˆ์ง€๋งŒ ์–ด๋ ต์ง€ ์•Š๊ฒŒ ํ•ด๊ฒฐํ–ˆ๋‹ค.

๋‚˜๋จธ์ง€๋Š” ๊ฐ„๋‹จํ•˜๊ฒŒ BFS ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•ด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.๐Ÿ˜€