์ฝ”ํ…Œ์ค€๋น„

<dfs, bfs> ๋ฐฑ์ค€ 2583๋ฒˆ. ์˜์—ญ ๊ตฌํ•˜๊ธฐ (์‹ค๋ฒ„ 1)

์š”๋Œœ๋‹ค 2023. 1. 6. 16:02

https://www.acmicpc.net/problem/2583

 

2583๋ฒˆ: ์˜์—ญ ๊ตฌํ•˜๊ธฐ

์ฒซ์งธ ์ค„์— M๊ณผ N, ๊ทธ๋ฆฌ๊ณ  K๊ฐ€ ๋นˆ์นธ์„ ์‚ฌ์ด์— ๋‘๊ณ  ์ฐจ๋ก€๋กœ ์ฃผ์–ด์ง„๋‹ค. M, N, K๋Š” ๋ชจ๋‘ 100 ์ดํ•˜์˜ ์ž์—ฐ์ˆ˜์ด๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ K๊ฐœ์˜ ์ค„์—๋Š” ํ•œ ์ค„์— ํ•˜๋‚˜์”ฉ ์ง์‚ฌ๊ฐํ˜•์˜ ์™ผ์ชฝ ์•„๋ž˜ ๊ผญ์ง“์ ์˜ x, y์ขŒํ‘œ๊ฐ’๊ณผ ์˜ค

www.acmicpc.net

from collections import deque


m,n,k = map(int, input().split())
lst = [[0]*n for _ in range(m)]
visited = [[0]*n for _ in range(m)] #๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ
dx = [0, 0, 1, -1]
dy = [1, -1, 0 , 0]

# print(lst)
for _ in range(k):
  y1, x1, y2, x2 = map(int, input().split())
  # print("์ „: (x1,y1)", x1, y1," (x2,y2)", x2, y2)
  x1 = m - x1
  x2 = m - x2
  # print("ํ›„: (x1,y1)", x1, y1," (x2,y2)", x2, y2)
  for i in range(len(lst)):
    for j in range(len(lst[i])):
      if x2<=i<x1 and y1<=j<y2 :
        lst[i][j] = 1


def bfs(lst, x, y):   
  q = deque()
  q.append((x,y)) #ํ์— ์ถ”๊ฐ€
  cnt = 1  
  lst[x][y] = True #๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ
  while q:
    x,y = q.popleft()
    for i in range(4):
      nx = x + dx[i]
      ny = y + dy[i]
      if 0<=nx<m and 0<=ny<n :
        if lst[nx][ny] == False:
          lst[nx][ny] = True
          q.append((nx,ny))
          cnt += 1
  return cnt

result = []
for i in range(m):
    for j in range(n):
        if lst[i][j] == False: #๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด
            result.append(bfs(lst, i, j))

result.sort()
print(len(result))
print(*result, sep=' ')   
  
"""
5 7 3
0 2 4 4
1 1 2 5
4 0 6 2

"""

๋งต์„ ์•„๋ž˜๋ถ€ํ„ฐ (0,0)์œผ๋กœ ์„ธ์„œ ์กฐ๊ธˆ ํ—ค๋งธ๋‹ค.

๊ทธ๋ฆผ์„ ๊ทธ๋ ค๊ฐ€๋ฉฐ ์ดํ•ดํ–ˆ๋Š”๋ฐ, ์ฝ”ํ…Œ์—์„  ์ข…์ด๋ฅผ ๋ชป ์“ฐ๋‹ˆ๊น ๊ฑฑ์ •์ด๋‹ค

๊ทธ๋ฆฌ๊ณ  ์˜ค๋žœ๋งŒ์— bfs๋ฅผ ํ‘ธ๋‹ˆ๊นŒ ๊นŒ๋จน์–ด์„œ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ฝ”๋“œ๋ฅผ ์ฐธ๊ณ ํ•˜์˜€์Œ ใ