문제 소개
https://www.acmicpc.net/problem/2583
2583번: 영역 구하기
첫째 줄에 M과 N, 그리고 K가 빈칸을 사이에 두고 차례로 주어진다. M, N, K는 모두 100 이하의 자연수이다. 둘째 줄부터 K개의 줄에는 한 줄에 하나씩 직사각형의 왼쪽 아래 꼭짓점의 x, y좌표값과 오
www.acmicpc.net
사용한 알고리즘
더보기
BFS
Code
import sys
import collections
#sys.stdin = open("input.txt", "r")
input=sys.stdin.readline
M , N , K = map(int,input().split(" "))
Arr =[]
for i in range(M):
Arr.append([0]*N)
rect = []
for _ in range(K):
rect.append(list(map(int,input().split(" "))))
def rectFill(list0) :
for xi in range(list0[0],list0[2]):
for yi in range(list0[1],list0[3]):
#print(xi,yi)
Arr[yi][xi]=1
for i in range(len(rect)):
rectFill(rect[i])
AreaList = []
def bfs(x0,y0):
Q = collections.deque([])
Q.append([x0,y0])
Area=1
Arr[x0][y0]=2
dx=[0,0,1,-1]
dy=[1,-1,0,0]
while Q:
cx,cy = Q.popleft()
for k in range(4):
newx=cx+dx[k]
newy=cy+dy[k]
if 0<=newx<M and 0<=newy<N and Arr[newx][newy]==0:
Q.append([newx,newy])
Arr[newx][newy] = 2
Area += 1
AreaList.append(Area)
for xx in range(M):
for yy in range(N):
if Arr[xx][yy]==0:
bfs(xx,yy)
AreaList.sort()
print(len(AreaList))
print(*AreaList)
※ end
반응형
'알고리즘 > 알고리즘 문제' 카테고리의 다른 글
[백준-1260] DFS와 BFS - Python (0) | 2021.12.08 |
---|---|
[백준-11724] 연결 요소의 개수 - Python (0) | 2021.12.07 |
[백준-4485] 녹색 옷 입은 애가 젤다지? - Python (0) | 2021.11.17 |
[백준-1238] 파티 - Python (0) | 2021.11.17 |
[백준-2668] 숫자고르기 - Python (0) | 2021.11.12 |