Cometin'

BOJ-2583 - Python

2020-12-08 at Algorithm category

y, x의 크기를 갖는 배열에 k개의 직사각형이 위치한다. 도형의 위치는 왼쪽 아래 좌표, 오른쪽 위 좌표를 입력받으며 도형이 위치하지 않는 구역의 수와 구역의 크기를 출력하는 문제. 동일한 크기의 boolean 배열을 이용하여 확인을 하여 dfs 연산을 이용하여 풀었다.

import sys
input = sys.stdin.readline

def dfs(sy, sx):
    q = [[sy, sx]]
    check[sy][sx] = True
    cnt = 1
    while q:
        y, x = q.pop()
        for ny, nx in dire:
            next_y = ny + y
            next_x = nx + x
            if 0 <= next_y < Y and 0 <= next_x < X:
                if not check[next_y][next_x]:
                    q.append([next_y, next_x])
                    check[next_y][next_x] = True
                    cnt += 1
    return cnt

dire = [[0, 1],
        [0, -1],
        [1, 0],
        [-1, 0]]

Y, X, k = map(int, input().split())
check = [[False for _ in range(X)] for _ in range(Y)]

for _ in range(k):
    x1, y1, x2, y2 = map(int, input().split())
    for vx in range(x1, x2):
        for vy in range(y1, y2):
            check[vy][vx] = True

ans = 0
ans_l = []
for ny in range(Y):
    for nx in range(X):
        if not check[ny][nx]:
            ans_l.append(dfs(ny, nx))
            ans += 1

print(ans)
print(*sorted(ans_l))

hyesungoh

Personal blog by hyesungoh.

I like to share my knowledge for those who wandering in issue.