본문 바로가기
알고리즘

[BOJ] 13565 침투 - python

by saoh 2022. 3. 23.

백준 13565번 침투 문제이다.

 

import sys
sys.setrecursionlimit(1000000)

M, N = map(int,sys.stdin.readline().split())

visited = [[0]*(N) for _ in range(M)] 
graph = []

for _ in range(M):
    a = list(map(int, sys.stdin.readline().rstrip()))
    graph.append(a)

def dfs(x,y):
    if x <= -1 or x >= M or y <= -1 or y >= N:
        return
    if graph[x][y] == 0 and visited[x][y] == 0:		 # graph[x][y]가 갈 수 있는 길이고, 방문 된 적 없으면
        visited[x][y] = 1
        dfs(x,y-1)	# 좌
        dfs(x-1,y)	# 상
        dfs(x,y+1)	# 우
        dfs(x+1,y)	# 하
 
for i in range(N):
	# 첫 째줄(outer line)이 0이고 방문한 적이 없는 좌표에서 dfs 호출
    if graph[0][i] == 0 and visited[0][i] == 0:
        dfs(0,i)

if 1 in visited[M-1]:	# 마지막 행에 1이 하나라도 있으면
    print("YES")
else:
    print("NO")

 

11724번 '연결 요소의 개수' 문제와 같이 setrecursionlimit을 10000으로 설정했더니 런타임 에러가 났다.

limit을 무작정 크게 하면 채점 서버가 감당할 수 없어 Segmentation fault가 발생하기 때문에,

1,000,000정도의 크기가 적당하다고 한다.

 

런타임 에러 (RecursionError) (acmicpc.net)