백준 문제 링크
그림
- BFS를 사용했다.
- 계속 하던대로 방문한 좌표는 queue에 넣어주고, 도화지에서 변경한다.(1 -> 0)
- 상,하,좌,우를 방문해서 1이 있는 곳을 모두 탐색한 다음 count를 return하는 함수를 만들면 된다.
- 도화지를 for문 2개로 돌면서 좌표의 값이 1이라면 count를 bfs(i,j)로 저장하고, answer에 count를 넣어준다.
- 그림이 하나도 없는 경우는 0을 출력하고,
그 외에는 그림의 개수와 가장 넓은 그림의 넓이를 출력한다.
from collections import deque
n, m = map(int, input().split())
lst = []
for _ in range(n):
lst.append(list(map(int, input().split())))
dx = [0,0,1,-1]
dy = [1,-1,0,0]
def bfs(x,y):
queue = deque()
queue.append((x,y))
lst[x][y] = 0
count = 0
while queue:
x,y = queue.popleft()
count += 1
for d in range(4):
nx = x + dx[d]
ny = y + dy[d]
if (0 <= nx < n) and (0 <= ny < m) and (lst[nx][ny] == 1):
queue.append((nx,ny))
lst[nx][ny] = 0
return count
answer = []
for i in range(n):
for j in range(m):
if lst[i][j] == 1:
count = bfs(i,j)
answer.append(count)
if len(answer) == 0:
print(0)
print(0)
else:
print(len(answer))
print(max(answer))