[백준] 2468번 안전영역

heering·2023년 2월 28일
0

백준

목록 보기
8/11

요즘 BFS에 빠져서 BFS를 주로 풀고 있다.

from collections import deque
import copy

def bfs(x, y, m):
    q = deque()
    q.append((x, y))

    while q:
        x, y = q.popleft()

        for i in range(0, 4):
            nx = x + dx[i]
            ny = y + dy[i]

            if 0<=nx<N and 0<=ny<N and m[nx][ny] == 0:
                q.append((nx, ny))
                m[nx][ny] = 1

    return

dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]

N = int(input())
l = []

for i in range(0, N):
    l.append(list(map(int, input().split())))

maximum = l[0][0]
minimum = l[0][0]
for i in range(0, N):
    for j in range(0, N):
        maximum = max(maximum, l[i][j])
        minimum = min(minimum, l[i][j])

answer = []
for h in range(minimum, maximum + 1):
    m = copy.deepcopy(l)
    for i in range(0, N):
        for j in range(0, N):
            if m[i][j] <= h:
                m[i][j] = 1
            else:
                m[i][j] = 0

    cnt = 0
    for i in range(0, N):
        for j in range(0, N):
            if m[i][j] == 0:
                m[i][j] = 1
                bfs(i, j, m)
                cnt += 1

    answer.append(cnt)


if max(answer) == 0:
    print(1)
else:
    print(max(answer))

전형적인 BFS 문제라 유기농 배추랑 풀이가 비슷하겠다 싶었는데, 그건 아니고 좀 예외처리가 필요했다. deepcopy를 쓸 필요가 있었던 재밌는 문제.

0개의 댓글