티끌모아 태산

[백 준/DFS-BFS] 1926: 그림 - 파이썬 본문

백준 문제

[백 준/DFS-BFS] 1926: 그림 - 파이썬

goldpig 2023. 2. 2. 21:35
728x90

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

 

1926번: 그림

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

www.acmicpc.net

코드 풀이

import sys
input = sys.stdin.readline
sys.setrecursionlimit(10**6)
#dfs알고리즘 수행
n, m = map(int, input().split())

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

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

num = []
count = 0
def dfs(x,y):
	if x < 0 or x >= n or y < 0 or y >=m:
		return False
	if graph[x][y] == 1:
		global count
		graph[x][y] = 0
		count += 1
		for i in range(4):
			nx = x + dx[i]
			ny = y + dy[i]
			dfs(nx,ny)
		return True
	return False
max_count = 0
result = 0
for i in range(n):
	for j in range(m):
		if dfs(i,j) == True:
			result += 1
			max_count = max(max_count, count)
			count = 0
print(result)
print(max_count)

 

주의 사항

import sys
input = sys.stdin.readline
sys.setrecursionlimit(10**6)
#dfs알고리즘 수행
n, m = map(int, input().split())

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

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

num = []
count = 0
def dfs(x,y):
	if x < 0 or x >= n or y < 0 or y >=m:
		return False
	if graph[x][y] == 1:
		global count
		graph[x][y] = 0
		count += 1
		for i in range(4):
			nx = x + dx[i]
			ny = y + dy[i]
			dfs(nx,ny)
		return True
	return False

result = 0
for i in range(n):
	for j in range(m):
		if dfs(i,j) == True:
			result += 1
			num.append(count)
			count = 0
print(result)
print(max(num))

처음에 두번 째 코드처럼 count를 list에 담아서 출력 했는데 답은 맞지만 런타임 에러 떴음. num = [] 에서 num.append(count) 하고print(max(num)) 하면 런타임 에러난다. 위 코드 처럼 max_count 변수 선언해서 max_count = max(max_count, count) 처럼 비교해서 출력해야 에러를 해결 할 수 있다.

728x90