6 5
1 1 0 1 1
0 1 1 0 0
0 0 0 0 0
1 0 1 1 1
0 0 1 1 1
0 0 1 1 1
4
9
백준 2667번 단지번호붙이기
https://velog.io/@junseong/%EB%B0%B1%EC%A4%80Python-2667%EB%B2%88-%EB%8B%A8%EC%A7%80%EB%B2%88%ED%98%B8%EB%B6%99%EC%9D%B4%EA%B8%B0-%EC%8B%A4%EB%B2%84-1
백준의 2667번 단지번호붙이기 문제와 똑같은 문제이다. 상황컨셉만 다르다. 총 연결요소의 갯수와 각 연결요소에 몇개의 요소가 있는지 구하면 되는 문제이다. 너무 똑같아서 자세한 설명은 위의 블로그를 참고하면 된다.
# 백준 1926번 그림
# 재귀 횟수, 읽는 속도 늘리기
import sys
sys.setrecursionlimit(10**6)
input = sys.stdin.readline
# 방향벡터 동-서-남-북순
dx = [1, -1, 0, 0]
dy = [0, 0, 1, -1]
def DFS(y, x):
global visited, temp_count
visited[y][x] = True
temp_count += 1
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if 0 <= nx < M and 0 <= ny < N and graph[ny][nx] and not visited[ny][nx]:
DFS(ny, nx)
# 0. 입력 및 초기화
N, M = map(int, input().split()) #N세로 M가로
visited = [[False] * M for _ in range(N)]
graph = []
count = 0 # 그림 갯수
answer_list = [] # 넓이
# 1. 연결 요소 입력
for i in range(N):
graph.append(list(map(int, input().split())))
# 2. DFS호출
for i in range(N):
for j in range(M):
if graph[i][j] and not visited[i][j]:
temp_count = 0
DFS(i, j)
count +=1
answer_list.append(temp_count)
# 3. 출력
print(count)
# 그래프가 다 0이여서 answer_list에 값이 없으면
# max함수가 참조값이 없어서 valueerror가 발생. 예외처리해줘야함
if answer_list:
print(max(answer_list))
else:
print(0)
처음에 값은 잘 나오는데 valueError가 났었다. 벨류에러는 참조값이 없는데 그 값을 이용하려고 하면 에러가 날 수 있다. 벨류에러가 난 이유는, 만약 그래프가 다 0이면 answer_list에는 아무 값이 없다. 빈리스트에 max함수를 이용하니까 에러가 났다. 값이 없을때 0을 출력하는 예외처리를 해주면 통과한다.