공부 기록장

[백준 - Python] 1926. 그림 (DFS/BFS) 본문

코딩 테스트/백준 문제 풀이

[백준 - Python] 1926. 그림 (DFS/BFS)

빛나무 2024. 1. 15. 12:19

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

 

1926번: 그림

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

www.acmicpc.net

 

코드

import sys
sys.setrecursionlimit(10**6)
input = sys.stdin.readline

n, m = map(int, input().split())
draw = []
for _ in range(n):
    draw.append(list(map(int, input().split())))

dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]

def dfs(x, y):
    global area
    area += 1
    draw[x][y] = 0
    for i in range(4):
        nx = x + dx[i]
        ny = y + dy[i]
        if nx < 0 or nx >= n or ny < 0 or ny >= m:
            continue
        if draw[nx][ny] == 1:
            dfs(nx, ny)

areas = []
for i in range(n):
    for j in range(m):
        if draw[i][j] == 1:
            area = 0
            dfs(i, j)
            areas.append(area)


print(len(areas))
if len(areas) == 0:
    print(0)
    exit(0)
areas.sort()
max_area = areas.pop()
print(max_area)

 

풀어본 유형이었다.

DFS로 풀어보았다.

 

그림이 하나도 없는 경우에 대한 처리를 해주지 않아서,

len(areas) == 0 인 경우에 areas.pop()이 되면서 런타임 에러가 떴다.

 

엣지 케이스들을 잘 처리해주자 !