백준1926(파이썬) - 그림

resilient

·

2021. 5. 24. 02:09

728x90
반응형

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

 

1926번: 그림

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

www.acmicpc.net

  • 이 문제는 여태까지 풀었던 DFS와 거의 비슷한 문제였다.
  • 다만 처리할 때,  '그림이 하나도 없는 경우에는 가장 넓은 그림의 넓이는 0이다. ' 를 생각해서 if문을 넣어주면 된다.
import sys
input = sys.stdin.readline
sys.setrecursionlimit(10000000)

n,m = map(int,input().split())
graph = []
dx = [1,-1,0,0]
dy = [0,0,1,-1]
for _ in range(n):
    graph.append(list(map(int,input().split())))

def dfs(x,y):
    global cnt
    cnt += 1
    graph[x][y] = 0
    for i in range(4):
        nx = x + dx[i]
        ny = y + dy[i]
        if -1<nx<n and -1<ny<m and graph[nx][ny]==1:
            dfs(nx,ny)

num_list = []
for i in range(n):
    for j in range(m):
        if graph[i][j] == 1:
            cnt=0
            dfs(i,j)
            num_list.append(cnt)

if len(num_list)==0:
    print(len(num_list))
    print(0)
else:
    print(len(num_list))
    print(max(num_list))
반응형