BFS - 안전영역

2022. 7. 18. 13:182022/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