Algorithm/문제풀이

[BOJ] 백준 1012 문제 - 유기농 배추 - 파이썬

Razelo 2021. 8. 13. 09:01

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

 

1012번: 유기농 배추

차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 

www.acmicpc.net

 

 

백준 유기농배추 문제 이다. 

 

sys.setrecurtionlimie()을 써주지 않았을때는 에러가 발생했다. RecursionError인데, 

재귀말고 반목문으로 작성해봐야겠다. 

 

만약 시간이 없어서 반복문으로 작성하지 못하였을 경우엔 sys.setrecurtionlimie()에 백만정도로 값을 세팅해주면 문제없이 돌아간다. 

 

# 0823 ~ 0858 
# 백준 1012 
import sys
from collections import deque
sys.setrecursionlimit(1000000) 
input = sys.stdin.readline 

def dfs(graph, x, y):
    if x <= -1 or x>= N or y<= -1 or y >= M:
        return False
    
    if graph[x][y] == 1:
        graph[x][y] = 0 

        dfs(graph, x - 1, y) # 상
        dfs(graph, x + 1, y) # 하
        dfs(graph, x, y - 1) # 좌
        dfs(graph, x, y + 1) # 우
        return True
    return False

T = int(input())

for _ in range(T):
    M, N, K = map(int, input().split())
    # M: 가로길이, N: 세로길이, K: 배추개수 
    # X            Y 
    g = [[0] * M for _ in range(N)]
    for _ in range(K):
        i, j = map(int, input().split())
        g[j][i] = 1 
    
    worm = 0 
    for i in range(N): # 세로 길이 -> x
        for j in range(M): # 가로 길이  -> y
            if dfs(g, i, j) == True:
                worm += 1
    print(worm)

 

RecurtionError에 대한 설명은 아래에 되어있다.

https://www.acmicpc.net/help/rte/RecursionError

 

런타임 에러 도움말 (RecursionError)

RecursionError RecursionError는 재귀와 관련된 에러입니다. 가장 많이 발생하는 이유는 Python이 정한 최대 재귀 깊이보다 재귀의 깊이가 더 깊어질 때입니다. Python이 정한 최대 재귀 깊이는 sys.getrecursion

www.acmicpc.net

 

하지만 만약 sys.setrecurtionlimie으로도 에러가 난다면 Segmentation fault가 발생해 런타임 에러 이유로 SegFault를 받게되었다고 보는 것이 맞다. 즉 채점서버가 감당하지 못하는 것이다. 

 

이 경우 너무 많은 재귀가 일어나는 것이다. 

그러니 이게 불안하면 반복문으로 작성하는 게 낫다. 

반응형