BFS - 안전영역
2022. 7. 18. 13:18ㆍ2022/BaekJoon_알고리즘
#높이 정보가 주어졌을 때, 장마철에 물에 잠기지 않는 안전한 영역의 최대 개수를 계산하는 프로그램
from collections import deque
def bfs(x, y):
global h, area, areaGraph, visited
dx = [0, 1, 0, -1]; dy = [1, 0, -1, 0]
q = deque([(x, y)])
visited[x][y] = True
areaGraph[x][y] = True
chk = False
while q:
x, y = q.popleft()
for i in range(4):
nx = x + dx[i]; ny = y + dy[i]
if 0<=nx<N and 0<=ny<N and visited[nx][ny] == False:
visited[nx][ny] = True
if graph[nx][ny] > h:
chk = True
q.append([nx, ny])
areaGraph[nx][ny] = True
area += 1
N = int(input())
graph = []; h = 0
for i in range(N):
tmp = list(map(int, input().split()))
graph.append(tmp)
H = max(h, max(tmp))
maxArea = 0
for h in range(0, H+1):
visited = [[False]*N for _ in range(N)]
areaGraph = [[False]*N for _ in range(N)]
area = 0
for x in range(N):
for y in range(N):
if graph[x][y] > h and visited[x][y] == False:
bfs(x, y)
maxArea = max(maxArea, area)
print(maxArea)
전형적인 BFS 문제... 그런데 잠기는 물의 높이 범위에서 살짝 헷갈렸었다.
물이 차지 않은 0인 경우도 있을건데 이 부분을 간과하고 1부터 시작한 것이다. 이부분을 수정하니 PASS!
'2022 > BaekJoon_알고리즘' 카테고리의 다른 글
BFS - 빙산 [ 2573번 ] (0) | 2022.07.20 |
---|---|
BFS - 스타트링크 [5014번] (0) | 2022.07.18 |
DFS - 촌수계산 [2644번] (0) | 2022.07.17 |
BFS - 숨바꼭질 [1697번] (0) | 2022.07.15 |
BFS - 단지번호붙이기 [2667번] (0) | 2022.07.14 |