https://www.acmicpc.net/problem/2583
시간 1초, 메모리 128MB
input :
output :
문제에서 제일 헷갈렸던 것은, 이 사각형들이 접하는 것을 상하로 뒤집은 다음에 bfs로 탐색을 해가지고 찾으려 했다.
근데 이 y, x / y, x 왼쪽 아래 좌표와, 오른쪽 위의 좌표가 헷갈렸다.
이렇게 y와 x로 입력을 받아서 그 범위안의 그래프 값들을 1로 바꿔주고,
그래프 모든 점을 돌아다니다가 0인 점을 만날 경우 여기에서 그래프 탐색을 하면서 1로 업데이트를 해주자.
import sys
from collections import deque
def bfs(start_x, start_y):
q = deque([(start_x, start_y)])
graph[start_x][start_y] += 1
cnt = 1
dx = [1, -1, 0, 0]
dy = [0, 0, -1, 1]
while q:
x, y = q.popleft()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if nx < 0 or nx >= m or ny < 0 or ny >= n:
continue
if graph[nx][ny] == 0:
cnt += 1
graph[nx][ny] += 1
q.append((nx, ny))
return cnt
m, n, k = map(int, sys.stdin.readline().split())
graph = [[0] * n for i in range(m)]
for i in range(k):
y1, x1, y2, x2 = map(int, sys.stdin.readline().split())
for x in range(x1, x2):
for y in range(y1, y2):
graph[x][y] = 1
ans = []
for x in range(m):
for y in range(n):
if graph[x][y] == 0:
ans.append(bfs(x, y))
print(len(ans))
ans.sort()
for item in ans:
print(item, end=" ")