Algorithm
2468 안전 영역 / DFS, BFS
김예나
2025. 5. 22. 14:26
정답
- 그래프 깊은 복사
g = [row[:] for row in graph]
- 아무런 땅이 물에 젖지 않는 경우도 포함해야 하기 때문에 비가 오는 경우를 0부터 넣어서 체크해야 함 (1부터 시작하면 1이하의 땅은 젖기 때문에)
from collections import deque
n = int(input()) # n * n 지도
# 지도 세팅
graph = []
for _ in range(n):
row = input()
row_list = list(map(int, row.split()))
graph.append(row_list)
# 상하좌우 세팅
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
def BFS(x, y, g):
queue = deque()
queue.append((x, y))
g[x][y] = 0
while queue:
x, y = queue.popleft()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if nx < 0 or ny < 0 or nx >= n or ny >= n:
continue
if g[nx][ny] == 0:
continue
if g[nx][ny] != 0:
queue.append((nx, ny))
g[nx][ny] = 0
# 0부터 100까지 높이로 물에 잠긴다고 가정했을 때 뮬애 안 잠기는 가장 큰 수가 정답 (아무 지역도 물에 안 잠기는 경우도 있으므로 0부터 시작해야 함)
ans = []
for i in range(0, 101):
area = 0
# 그래프 세팅
g = [row[:] for row in graph]
for x in range(n):
for y in range(n):
if g[x][y] <= i:
g[x][y] = 0
for x in range(n):
for y in range(n):
if g[x][y] != 0:
area = area + 1
BFS(x, y, g)
ans.append(area)
print(max(ans))