💡 BFS의 가장 기본적인 유형의 문제

import sys
from collections import deque
input = sys.stdin.readline
n, m = map(int,input().rstrip().split(' '))
graph = []
visited = [[False] * m for _ in range(n)]
# 총 그림수
cnt = 0
# 그림 넓이
maxSquare = 0
for _ in range(n):
graph.append(list(map(int,input().rstrip().split(' '))))
def bfs(a,b):
dq = deque()
dq.append((a,b))
visited[b][a] = True
square = 1
# 상, 하, 좌, 우
dx = [0, 0, -1, 1]
dy = [1, -1, 0, 0]
while dq:
x, y = dq.popleft()
for idx in range(4):
nx = x + dx[idx]
ny = y + dy[idx]
if 0 <= nx < m and 0 <= ny < n and graph[ny][nx] == 1 and visited[ny][nx] == False:
dq.append((nx,ny))
visited[ny][nx] = True
square += 1
return square
for i in range(n):
for j in range(m):
if graph[i][j] == 1 and visited[i][j] == False:
maxSquare = max(bfs(j,i),maxSquare)
cnt += 1
print(cnt)
if cnt == 0:
print(0)
else:
print(maxSquare)
💡 코테 스터디 중 나온 기발한 방식
우진님: 함수의 관점에서 보면 y,x인데, 표의 느낌으로 보면 x,y이므로, x,y로 만들어서 진행한다.