[백준_Python] 1926번 - 그림 [실버 1]

황준성·2024년 11월 29일
0

BOJ_Python

목록 보기
28/70

문제

예제 입력 1

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

예제 출력 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을 출력하는 예외처리를 해주면 통과한다.

profile
Make progress

0개의 댓글