[백준] 1743 - 음식물 피하기 (Python)

[백준] 1743 - 음식물 피하기

풀이 - DFS

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import sys
sys.setrecursionlimit(10**7) #재귀 깊이 설정

N,M,T=map(int, input().split())
arr=[[0]*M for _ in range(N)]
visited=[[0]*M for _ in range(N)]
answer=[]

dx=[-1,1,0,0] #상,하,좌,우
dy=[0,0,-1,1] #상,하,좌,우

for i in range(T):
    a,b=map(int, input().split())
    arr[a-1][b-1]=1

def dfs(x,y):
    global num
    num+=1
    visited[x][y]=1
    for i in range(4):
        nx=x+dx[i]
        ny=y+dy[i]
        if nx>=0 and nx<N and ny>=0 and ny<M:
            if arr[nx][ny]==1 and visited[nx][ny]==0:
                dfs(nx,ny)
    return num

for i in range(N):
    for j in range(M):
        if arr[i][j]==1 and visited[i][j]==0:
            num=0
            answer.append(dfs(i,j))

print(max(answer))

📌 sys.setrecursionlimit() 사용

파이썬 최대 재귀 횟수는 1000번으로 제한되어 있어서 DFS문제를 풀때 런타임 에러가 발생할 수 있으므로 재귀 제한을 풀어주어야 한다.