๐ ๋ฌธ์
์ด๋ค ํฐ ๋ํ์ง์ ๊ทธ๋ฆผ์ด ๊ทธ๋ ค์ ธ ์์ ๋, ๊ทธ ๊ทธ๋ฆผ์ ๊ฐ์์, ๊ทธ ๊ทธ๋ฆผ ์ค ๋์ด๊ฐ ๊ฐ์ฅ ๋์ ๊ฒ์ ๋์ด๋ฅผ ์ถ๋ ฅํ์ฌ๋ผ. ๋จ, ๊ทธ๋ฆผ์ด๋ผ๋ ๊ฒ์ 1๋ก ์ฐ๊ฒฐ๋ ๊ฒ์ ํ ๊ทธ๋ฆผ์ด๋ผ๊ณ ์ ์ํ์. ๊ฐ๋ก๋ ์ธ๋ก๋ก ์ฐ๊ฒฐ๋ ๊ฒ์ ์ฐ๊ฒฐ์ด ๋ ๊ฒ์ด๊ณ ๋๊ฐ์ ์ผ๋ก ์ฐ๊ฒฐ์ด ๋ ๊ฒ์ ๋จ์ด์ง ๊ทธ๋ฆผ์ด๋ค. ๊ทธ๋ฆผ์ ๋์ด๋ ๊ทธ๋ฆผ์ ํฌํจ๋ 1์ ๊ฐ์์ด๋ค.
๐์ ๋ ฅ
์ฒซ์งธ ์ค์ ๋ํ์ง์ ์ธ๋ก ํฌ๊ธฐ n(1 ≤ n ≤ 500)๊ณผ ๊ฐ๋ก ํฌ๊ธฐ m(1 ≤ m ≤ 500)์ด ์ฐจ๋ก๋ก ์ฃผ์ด์ง๋ค. ๋ ๋ฒ์งธ ์ค๋ถํฐ n+1 ์ค ๊น์ง ๊ทธ๋ฆผ์ ์ ๋ณด๊ฐ ์ฃผ์ด์ง๋ค. (๋จ ๊ทธ๋ฆผ์ ์ ๋ณด๋ 0๊ณผ 1์ด ๊ณต๋ฐฑ์ ๋๊ณ ์ฃผ์ด์ง๋ฉฐ, 0์ ์์น ์ด ์๋ ๋ถ๋ถ, 1์ ์์น ์ด ๋ ๋ถ๋ถ์ ์๋ฏธํ๋ค)
๐์ถ๋ ฅ
์ฒซ์งธ ์ค์๋ ๊ทธ๋ฆผ์ ๊ฐ์, ๋์งธ ์ค์๋ ๊ทธ ์ค ๊ฐ์ฅ ๋์ ๊ทธ๋ฆผ์ ๋์ด๋ฅผ ์ถ๋ ฅํ์ฌ๋ผ. ๋จ, ๊ทธ๋ฆผ์ด ํ๋๋ ์๋ ๊ฒฝ์ฐ์๋ ๊ฐ์ฅ ๋์ ๊ทธ๋ฆผ์ ๋์ด๋ 0์ด๋ค.
๐ ๋ฌธ์ ํด์
์ฝ๊ฒ ํด์ํ๋ฉด ๊ทธ๋ํ๊ฐ ์ฃผ์ด์ก์ ๋ ์ฐ๊ฒฐ๋์ด ์๋ ์์์ ๊ฐฏ์์ ์ฐ๊ฒฐ๋์ด ์๋ ์์์ ์ต๋๊ฐ์ ๊ตฌํ๋ฉด ๋๋ ๋ฌธ์ ์ด๋ค. BFS ๋ฅผ ์ฌ์ฉํ์ฌ DFS ๋ณด๋ค ๋น ๋ฅธ ํ์ด๊ฐ ๊ฐ๋ฅํ๋ค.
๐ ํ์ด
๋ค๋ฅธ BFS ๋ฌธ์ ๋ค์ฒ๋ผ ์์น ๋์ด ์๋ ๋ถ๋ถ์ ์ฐพ์ ๋ฐฉ๋ฌธํ๊ณ BFS ํ์์ ์์ํ๋ค. ์ด๋ ์ฐ๊ฒฐ ์์์ ์ต๋๊ฐ(๊ทธ๋ฆผ์ ๋์ด)๋ฅผ ์ถ๋ ฅํด์ฃผ๊ธฐ ์ํด are ๋ผ๋ ๋ณ์์ ์ฐ๊ฒฐ ์๋ฅผ ๋ด๊ณ res ๋ฐฐ์ด์ ๋ด์์ฃผ์๋ค. ์ฒดํฌํด์ผ ํ ๊ฒ์ ๊ทธ๋ฆผ์ด ํ๋๋ ๊ทธ๋ ค์ง์ง ์์ ๊ฒฝ์ฐ 0์ ์ถ๋ ฅํด์ผํ๋๋ฐ max ํจ์๋ ๋น ๋ฐฐ์ด์์ ์๋ํ์ง ์๋๋ค. ์ด๋ถ๋ถ์ if ๋ฌธ์ ์ฌ์ฉํ์ฌ ์ฒ๋ฆฌํ ์๋ ์์ง๋ง, ํ์๋(์ผ์ ์ค๊ธ๊ฑฐ๋ฆผ) res ๋ฐฐ์ด ์์ฑํ ๋ 0์ ๋ฃ์์ผ๋ก์จ ํด๊ฒฐํ์๋ค. ์๊ฐ๋ฉด์์๋ ๋ณ์ฐจ์ด ์์ด๋ณด์ด์ง๋ง ์ฝ๋๊ฐ ๋ ์๋ป๋ณด์ธ๋ค.
๐ป ์ฝ๋
import sys
from collections import deque
input = sys.stdin.readline
n,m = map(int,input().rstrip().split())
do = [] # ๋ํ์ง, ๊ทธ๋ํ
cnt = 0 # ๊ทธ๋ฆผ์ ๊ฐฏ์ ๋ณ์
res = [0] # ๊ทธ๋ฆผ์ ๋์ด ๋ด์ ๋ฐฐ์ด
# ๊ทธ๋ฆผ ๊ทธ๋ฆฌ๊ธฐ
for i in range(n):
do.append(list(map(int,input().rstrip().split())))
def bfs(x,y):
# ์ํ์ข์ฐ 4๋ฐฉํฅ
dx = [-1,1,0,0]
dy = [0,0,-1,1]
queue = deque()
queue.append([x,y])
do[x][y] = 0 # ์์์ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ
are = 1 # ๋์ด๋ 1๋ถํฐ ์์
while queue:
a,b = queue.popleft()
for i in range(4):
nx = a + dx[i]
ny = b + dy[i]
# ๋ํ์ง ์์ ์์นํ๊ณ ์์ง ๋ฐฉ๋ฌธํ์ง ์์๋ค๋ฉด ๋ฐฉ๋ฌธ
if 0 <= nx < n and 0 <= ny < m and do[nx][ny] == 1:
are += 1 # ๋์ด ํค์ฐ๊ธฐ
do[nx][ny] = 0 # ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ
queue.append([nx, ny]) # ํ์ ์ฝ์
res.append(are) # ๊ทธ๋ฆผ์ ๋์ด ๋ฐฐ์ด์ ์ฝ์
for x in range(n):
for y in range(m):
if do[x][y] == 1: # ๊ทธ๋ฆผ์ด ๊ทธ๋ ค์ ธ์๋ค๋ฉด BFS ํ์ ์์
bfs(x,y)
cnt += 1 # ๊ทธ๋ฆผ ๊ฐฏ์ +1
print(cnt) # ๊ทธ๋ฆผ๊ฐฏ์ ์ถ๋ ฅ
print(max(res)) # ๊ทธ๋ฆผ์ ๋์ด ์ต๋๊ฐ ์ถ๋ ฅ
๐ ๋ฌธ์ ๋งํฌ : ๊ทธ๋ฆผ
'Problem Solving > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 1107๋ฒ: ๋ฆฌ๋ชจ์ฝ - ํ์ด์ฌ (0) | 2022.06.10 |
---|---|
[๋ฐฑ์ค] 13565๋ฒ: ์นจํฌ - ํ์ด์ฌ (0) | 2022.06.09 |
[๋ฐฑ์ค] 2448๋ฒ: ๋ณ์ฐ๊ธฐ - ํ์ด์ฌ (0) | 2022.06.06 |
[๋ฐฑ์ค] 14494๋ฒ: ๋ค์ด๋๋ฏน์ด ๋ญ์์? - ํ์ด์ฌ (0) | 2022.06.05 |
[๋ฐฑ์ค] 1012๋ฒ: ์ ๊ธฐ๋ ๋ฐฐ์ถ - ํ์ด์ฌ (0) | 2022.06.03 |