문제
풀이
- 쓰레기를 탐색해야하는 문제이므로 DFS/BFS 중에 하나를 골라 적용해 풀면 되는 문제이다.
DFS
알고리즘을 이용하였다.
- DFS를 구현하려면 재귀호출을 해야하는데 이로 인해 시간 초과가 날 수 있어서 이를 방지하기 위한
sys 모듈
의 setrecursionlimit
함수로 최대 재귀 깊이를 재설정하였다.
코드
from sys import stdin, setrecursionlimit
input = stdin.readline
setrecursionlimit(10**5)
n, m, k = map(int, input().split())
trash = [list(map(int, input().split())) for _ in range(k)]
graph = [['.' for _ in range(m)] for _ in range(n)]
visited = [[False] * m for _ in range(n)]
result = []
for x, y in trash:
graph[x-1][y-1] = '#'
dx = [-1, 0, 0, 1]
dy = [0, -1, 1, 0]
def dfs(x, y):
visited[x][y] = True
size = 1
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 visited[nx][ny] == False:
if graph[nx][ny] == '#':
size += dfs(nx, ny)
return size
for x in range(n):
for y in range(m):
if visited[x][y] == False and graph[x][y] == '#':
result.append(dfs(x, y))
print(max(result))
결과
출처 & 깃허브
BOJ 1743
github