ํ’€์ด


๋šซ๋ฆฐ ๋ถ€๋ถ„์„ ์ œ์™ธํ•œ ๊ณต๊ธฐ์™€ ์ ‘์ด‰๋˜๋Š” ์น˜์ฆˆ๋Š” ๋…น์„ ๋•Œ ์ „์ฒด๊ฐ€ ๋…น์œผ๋ ค๋ฉด ์–ผ๋งˆ๋‚˜ ๊ฑธ๋ฆฌ๊ณ  ๋…น๊ธฐ ์ง์ „์˜ ์น˜์ฆˆ๋ฉด์ ์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์ด๋‹ค.

2์ฐจ์› ๋ฐฐ์—ด์˜ ํ…Œ๋‘๋ฆฌ๊ฐ€ ๋นˆ์นธ์œผ๋กœ ์ฃผ์–ด์ง„๋‹ค๋Š” ์ ์„ ํ™œ์šฉํ•ด์„œ 0, 0 ์„ ์‹œ์ž‘์œผ๋กœ BFS ๋ฅผ ์‹คํ–‰ํ–ˆ์„ ๋•Œ 1 ์ด ์žˆ๋Š” ์ง€์ ์„ 0 ์œผ๋กœ ๋ฐ”๊พธ๊ณ  ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ ํ•ด์ฃผ๋Š” ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๋ฉด ๊ณต๊ธฐ์™€ ์ ‘์ด‰ํ•œ ์นธ์„ ๋…น์ธ ์ƒํƒœ์˜ 2์ฐจ์› ๋ฐฐ์—ด์„ ๋งŒ๋“ค์–ด ๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

BFS ๊ฐ€ ๋ชจ๋‘ ์‹คํ–‰๋˜๊ณ  ๋‚˜๋ฉด board ์˜ ๊ฐ’์„ ๋”ํ•˜์—ฌ ๋‚จ์•„์žˆ๋Š” ์น˜์ฆˆ๋ฉด์ ์„ ๋ฆฌํ„ดํ•œ๋‹ค.

๋งŒ์•ฝ ์น˜์ฆˆ๋ฉด์ ์ด 0์ด ์•„๋‹ˆ๋ผ๋ฉด ans ์— ์ €์žฅํ•ด์ค€ ํ›„ BFS ๋ฅผ ๋‹ค์‹œ ์‹คํ–‰ํ•œ๋‹ค.

์น˜์ฆˆ๋ฉด์ ์ด 0์ด ๋˜์—ˆ๋‹ค๋ฉด ans ์— ์ €์žฅํ•ด๋‘” 1์‹œ๊ฐ„ ์ „์˜ ์น˜์ฆˆ๋ฉด์ ๊ณผ ๋ฐ˜๋ณต๋œ BFS ์˜ ํšŸ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•ด์ฃผ๋ฉด๋œ๋‹ค.

์†Œ์Šค์ฝ”๋“œ


# ์น˜์ฆˆ
from collections import deque
import sys
input = sys.stdin.readline
 
def bfs(i, j):
    q = deque()
    q.append((i, j))
    visited[i][j] = 1
    while q:
        x, y = q.popleft()
        for k in range(4):
            nx = x + dx[k]
            ny = y + dy[k]
            if 0 <= nx < n and 0 <= ny < m and visited[nx][ny] == 0:
                visited[nx][ny] = 1
                if board[nx][ny] == 0:
                    q.append((nx, ny))
                else:
                    board[nx][ny] = 0
    total = 0
    for b in board:
        total += sum(b)
    return total
 
 
dx = [1, -1, 0, 0]
dy = [0, 0, 1, -1]
 
n, m = map(int, input().split())
board = [list(map(int, input().split())) for _ in range(n)]
hr = 0
ans = 0
for b in board:
    ans += sum(b)
 
while True:
    visited = [[0]*m for _ in range(n)]
    temp = bfs(0, 0)
    hr += 1
    if temp == 0:
        print(hr)
        print(ans)
        break
    ans = temp

References