https://www.acmicpc.net/problem/2573
2573번: 빙산
첫 줄에는 이차원 배열의 행의 개수와 열의 개수를 나타내는 두 정수 N과 M이 한 개의 빈칸을 사이에 두고 주어진다. N과 M은 3 이상 300 이하이다. 그 다음 N개의 줄에는 각 줄마다 배열의 각 행을
www.acmicpc.net
def bfs(si,sj):
q=deque([(si,sj)])
visited[si][sj] = 1
while q:
i, j = q.popleft()
for ti, tj in [(1, 0), (-1, 0), (0, 1), (0, -1)]:
ni, nj = i + ti, j + tj
if 0 <= ni < n and 0 <= nj < m:
if arr[ni][nj]!= 0 and not visited[ni][nj]:
visited[ni][nj] = 1
q.append((ni,nj))
elif arr[ni][nj] == 0:
cnt_arr[i][j] += 1
return 1
import sys
from collections import deque
input = sys.stdin.readline
n, m = map(int,input().split())
arr = [list(map(int,input().split())) for _ in range(n)]
case = 0
while True:
cnt_arr = [[0]*m for _ in range(n)]
visited = [[0] * m for _ in range(n)]
result,flag = 0,0
for i in range(n):
for j in range(m):
if arr[i][j] != 0 and not visited[i][j]:
result += bfs(i,j)
for i in range(n):
for j in range(m):
arr[i][j] = max(0, arr[i][j] - cnt_arr[i][j]) # 최대 0으로 설정
if result == 0:
break
if result >= 2:
flag = 1
break
case += 1
if flag:
print(case)
else:
print(0)
'백준' 카테고리의 다른 글
백준 14503. 로봇 청소기 (0) | 2023.09.22 |
---|---|
백준 9205. 맥주 마시면서 걸어가기 (0) | 2023.09.21 |
백준 2468. 안전 영역 (0) | 2023.09.20 |
백준 1182. 부분수열의 합 (0) | 2023.09.18 |
백준 15649. N과 M (1) (0) | 2023.09.15 |