👉 문제 링크
import sys
input = sys.stdin.readline
sys.setrecursionlimit(10**6)
n,m = map(int,input().split())
graph = []
for _ in range(n):
tmp = list(map(int,input().split()))
graph.append(tmp)
dx = [1,-1,0,0]
dy = [0,0,1,-1]
def dfs(x,y):
global w
visited[x][y] = True
w += 1
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if 0<=nx<n and 0<=ny<m:
if not visited[nx][ny] and graph[nx][ny]==1:
dfs(nx,ny)
visited = [[False]*m for _ in range(n)]
arr = [] # 그림의 넓이들을 저장하기 위한 배열
cnt = 0 # 그림의 개수를 세기 위한 변수
for i in range(n):
for j in range(m):
w = 0 # 그림마다 넓이를 카운팅 하기 위해 초기화
if graph[i][j] == 1 and not visited[i][j]:
dfs(i,j)
cnt += 1
arr.append(w)
print(cnt)
if len(arr) == 0:
print(0)
else:
print(max(arr)) # 저장된 넓이 중 가장 큰 값 출력
어려운 문제는 아니지만 꽤나 오래 삽질 한 문제.
가장 큰 넓이를 구하기 위해 배열 (코드의 arr)에 저장하여 가장 큰 값을 출력하는 식으로 구현하였다.
w 변수를 설정해 그림의 넓이를 더해가며 카운트하고, 구역이 바뀔 때마다 0으로 초기화 하였다.