2583๋ฒ - ์์ญ ๊ตฌํ๊ธฐ
๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๋ํ์ง ์์ ์ง์ฌ๊ฐํ์ ์งํฉ์ด ์ฃผ์ด์ง๋ฉด ์ง์ฌ๊ฐํ์ ์ ์ธํ ์์ญ์ ๊ฐ์์ ๋์ด๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์ ๋๋ค.
que = deque()
amount = []
M,N,K = map(int,input().split())
graph = [[0]*N for _ in range(M)]
for _ in range(K):
a,b,c,d = map(int,input().split())
for i in range(b,d):
for j in range(a,c):
graph[i][j] = 1
BFS๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด que๋ฅผ ๋ฐ์์ค๊ณ ๊ทธ๋ํ๋ฅผ ์ด์ฐจ์ ๋ฆฌ์คํธ ์์ ํํํ๊ธฐ ์ํด a,b,c,d ๋ณ์๋ฅผ ๋ฐ์ ๋ค์ for๋ฌธ์ ํตํด ์ง์ฌ๊ฐํ์ด ๊ทธ๋ ค์ง ์ ๋ํ์ง๋ฅผ ๊ตฌํํด์ค์๋ค.
์ถ๋ ฅ ์์ฒด๋ ์ ๋ํ์ง ์ผ์ด์ค๋ ์ํ์ข์ฐ ๋ฐ์ ์ ์ํจ ๊ฐ์ผ๋ก ๋์ค๋๋ฐ ๊ฒฐ๊ณผ์ ์ผ๋ก ๊ฐ์ด๋ ์ฃผ์ด์ง ๊ณต๊ฐ์ ๋์ด ์ง์ฌ๊ฐํ์ ๋์ด ๋ฑ ๊ตฌํ๋ ๋ฐ๋ ์ง์ฅ์ด ์์ผ๋๊น ์งํํด๋ ๋ฉ๋๋ค.
sum = 0
for m in range(M):
for n in range(N):
if graph[m][n] == 0:
graph[m][n] = 2
amount.append(bfs(m,n)+1)
sum += 1
๋ํ์ง ์์ ์ง์ฌ๊ฐํ์ด ์๋ ๋น๊ณต๊ฐ์ 2๋ก ํ๊ธฐํด์ฃผ๋๋ก ํ๊ฒ ์ต๋๋ค. ํ์์ด ์๋ ๋น๊ณต๊ฐ์ ์ด๊ธฐ๊ฐ์ 0์ด๋ฏ๋ก 0์ผ๋ ํ์์ ์์ํ๋ ์๊ธฐ์์ ์ 2๋ก ์ค์ ํ๊ณ BFS ํจ์๋ฅผ ๋๋ฆฝ๋๋ค.
from collections import deque
dx = [-1,1,0,0]
dy = [0,0,1,-1]
def bfs(x,y):
a = 0
que.append([x,y])
while que:
x,y = que.popleft()
for i in range(4):
nx = dx[i] + x
ny = dy[i] + y
if nx<0 or ny<0 or nx>=M or ny>=N:
continue
if graph[nx][ny] == 0:
graph[nx][ny] = 2
a += 1
que.append([nx,ny])
return a
ํญ์ ํ๋ ๊ฒ์ฒ๋ผ 4๋ฐฉํฅ ํ์์ ์ค์ํ๋ ์ค์ ๋ง์ฝ 4๋ฐฉํฅ ์ค์์ ํ์์ด ์๋ ๋น๊ณต๊ฐ 0์ ๋ง๋๋ฉด 2๋ก ๋ฐ๊ฟ์ฃผ๊ณ ๋น๊ณต๊ฐ์ ๋์ด๋ฅผ ๊ตฌํ๊ธฐ ์ํด ํด๋น ๊ณต๊ฐ์ ๋ง๋ ๋๋ง๋ค a๊ฐ์ 1์ ๋ํด์ค๋๋ค. ์ต์ข ์ ์ผ๋ก๋ ๋น๊ณต๊ฐ์ ๋์ด๋ฅผ ๋ฆฌํดํด์ค๋๋ค.
amount.append(bfs(m,n)+1)
sum += 1
์๊น ์์ ํ์์์ for๋ฌธ ์์ ์ด๋ฐ๊ฒ ์ ํ์์๋๋ฐ ๋์ด๋ฅผ ๊ตฌํ๋ ์์ ์๊ธฐ ์์ ์ ์ ์ธ์ํค๊ณ ํ์์ ํ๋ฏ๋ก 1์ ์ถ๊ฐ์ํจ ๋์ด๊ฐ์ amount ๋ฐฐ์ด์ ์ถ๊ฐ์ํค๊ณ bfs๊ฐ ๋๋ฌ์ผ๋ฉด ์ต์ข ์ ์ผ๋ก ๊ทธ ๊ตฌ์ญ ํ์์ ์ข ๋ฃ๋ ๊ฒ์ด๋ฏ๋ก ์ง์ฌ๊ฐํ์ด ์๋ ๊ณต๊ฐ์ ๊ฐ์ + 1์ ํด์ค๋๋ค.
amount.sort()
print(sum)
for values in amount:
print(values,end=' ')
๋ง์ง๋ง์ผ๋ก amount๋ฅผ ์ ๋ ฌํ๊ณ sum๊ฐ๊ณผ amount ๊ฐ์ ์ถ๋ ฅํ๋ฉด ๋ต์ด ๋์ต๋๋ค.