본문 바로가기

개발/algorithm

[백준 1926번] 그림 -python

문제 링크

https://www.acmicpc.net/problem/1926

 

1926번: 그림

어떤 큰 도화지에 그림이 그려져 있을 때, 그 그림의 개수와, 그 그림 중 넓이가 가장 넓은 것의 넓이를 출력하여라. 단, 그림이라는 것은 1로 연결된 것을 한 그림이라고 정의하자. 가로나 세로

www.acmicpc.net

풀이 

from collections import deque 

nx = [ 1, -1, 0, 0 ]
ny = [ 0, 0, 1, -1 ]

def bfs(x,y):
  q= deque()
  q.append((x,y))
  num = 1 
  maps[x][y] = 0
  while q :
    x, y = q.popleft()
    for i in range(4):
      dx = x + nx[i]
      dy = y + ny[i]

      if 0 <= dx < n and 0<= dy < m and maps[dx][dy] == 1 :
        maps[dx][dy] = 0
        num += 1 
        q.append((dx,dy))
  
  return num 

n, m = map(int,input().split())

maps = []

for _ in range(n):
  maps.append(list(map(int,input().split())))

# 그림 개수 저장 
count = 0
# 그림 넓이 저장할 배열 
result = []
for i in range(n):
  for j in range(m):
    if maps[i][j] == 1:
      count += 1 
      result.append(bfs(i,j))

print(count)

if result :
  print(max(result))
else:
  print(0)