본문 바로가기
알고리즘/그래프 탐색

[백준][Python] 2583번 영역 구하기

by 임짠짠 2022. 12. 1.
반응형
 

2583번: 영역 구하기

첫째 줄에 M과 N, 그리고 K가 빈칸을 사이에 두고 차례로 주어진다. M, N, K는 모두 100 이하의 자연수이다. 둘째 줄부터 K개의 줄에는 한 줄에 하나씩 직사각형의 왼쪽 아래 꼭짓점의 x, y좌표값과 오

www.acmicpc.net

 

 

코드

 

import sys
sys.setrecursionlimit(10000)
from collections import deque
def bfs(x,y):
	global cnt
	queue = deque()
	queue.append((x,y))
	while queue:
		x,y = queue.popleft()
		rec[x][y] = 1
		for i in range(4):
			nx = x + dx[i]
			ny = y + dy[i]
			if 0<=nx<m and 0<=ny<n and rec[nx][ny]==0:
				cnt+=1
				bfs(nx,ny)

m,n,k = map(int,input().split())
rec = [[0]*n for _ in range(m)]
for _ in range(k):
	x1,y1,x2,y2 = map(int,input().split())
	for i in range(y1,y2):
		for j in range(x1,x2):
			rec[i][j] = 1
count = 0
cnt = 1
ans = []
dx = [-1,1,0,0]
dy = [0,0,-1,1]	
for i in range(m):
	for j in range(n):
		if rec[i][j] == 0:
			count += 1
			bfs(i,j)
			ans.append(cnt)
			cnt = 1
print(count)
ans.sort()
print(*ans)
반응형

댓글