[BOJ/Python] 1926 : 그림

정나영·2023년 8월 11일
0

👉 문제 링크

👉 전체 코드

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으로 초기화 하였다.

0개의 댓글