이번 문제는 깊이우선탐색으로 해결하였다. 우선 모눈종이를 나타내는 리스트 field를 0으로 채운 후, 직사각형의 영역을 1로 갱신한 뒤에 검사하려는 다음 눈금이 범위 내에 있고 직사각형의 범위가 아니라면 카운팅 변수를 1씩 증가시키며 재귀함수를 호출하는 방식으로 접근하였다. 검사한 눈금은 1로 갱신시킨다. 결론적으로 field는 1로 채워지게 된다. sys.setrecursionlimit()을 설정 안해줘서 재귀 에러가 발생하였다. 재귀 함수를 사용한다면 습관화하는 것이 좋을 것 같다.
import sys
sys.setrecursionlimit(10**9)
def dfs(y, x, cnt):
dy=[0, 0, 1, -1]
dx=[1, -1, 0, 0]
field[y][x]=1
for i in range(4):
ny=y+dy[i]
nx=x+dx[i]
if ny>=0 and nx>=0 and ny<m and nx<n and field[ny][nx]==0:
cnt=dfs(ny, nx, cnt+1)
return cnt
m, n, k=map(int, input().split())
field=[[0]*n for _ in range(m)]
for _ in range(k):
lx, ly, rx, ry = map(int, input().split())
for i in range(ly, ry):
for j in range(lx, rx):
field[i][j]=1
result=[]
for i in range(m):
for j in range(n):
if field[i][j]==0:
result.append(dfs(i, j, 1))
print(len(result))
result.sort()
print(*result)