◦ Algorithm/Python

백준 파이썬 1926 그림 BFS

밍블리s2 2023. 3. 25. 13:33
  • graph값이 1일 때 BFS 시작
    • 방문 여부를 체크하기 위해 방문한 곳의 값은 0으로 초기화
    • 그림 크기를 재기 위해 count 선언
    • BFS 탐색 끝나면 count값을 return해줌
  • return 받은 count값을 paint리스트에 저장
  • paint 값 중 가장 큰 값을 출력

 

from collections import deque
 
n, m = map(int, input().split())
graph = []
 
for i in range(n):
    graph.append(list(map(int, input().split())))
 
dx = [0, 0, 1, -1]
dy = [1, -1, 0, 0]
 
def bfs(a, b):
    queue = deque()
    queue.append((a, b))
    graph[a][b] = 0
    count = 1
 
    while queue:
        x, y = queue.popleft()

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

            if nx < 0 or nx >= n or ny < 0 or ny >= m:
                continue

            if graph[nx][ny] == 1:
                graph[nx][ny] = 0
                queue.append((nx, ny))
                count += 1

    return count
 
paint = []
for i in range(n):
    for j in range(m):
        if graph[i][j] == 1:
            paint.append(bfs(i, j))
 
# 이렇게 안 하면 런타임 에러 발생
if len(paint) == 0:
    print(len(paint))
    print(0)
else:
    print(len(paint))
    print(max(paint))