BOJ/Python

백준 1012번 유기농 배추 파이썬 DFS

띵지니어 2022. 2. 6. 14:04

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

 

1012번: 유기농 배추

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

www.acmicpc.net

 

답안

import sys
sys.setrecursionlimit(10**6)

def dfs(x, y):
    if x <= -1 or x >= m or y <= -1 or y >= n:
        return False
    
    if graph[x][y] == 1:
        graph[x][y] = 0
        dfs(x-1, y)
        dfs(x, y-1)
        dfs(x+1, y)
        dfs(x, y+1)
        return True
    return False


for _ in range(int(input())):
    n, m, k = map(int, input().split()) #열,행,배추개수
    
    graph = [[0] * n for _ in range(m)]
    for _ in range(k):
        a, b = map(int, input().split())
        graph[b][a] = 1
        
    result = 0
    for i in range(m):
        for j in range(n):
            if dfs(i,j) == True:
                result += 1
    print(result)

 


 

문제 설명을 잘 읽고 입력만 제대로 받으면

 

https://thingjin.tistory.com/entry/%EB%B0%B1%EC%A4%80-2667%EB%B2%88-%EB%8B%A8%EC%A7%80-%EB%B2%88%ED%98%B8-%EB%B6%99%EC%9D%B4%EA%B8%B0-%ED%8C%8C%EC%9D%B4%EC%8D%AC-DFS

 

백준 2667번 단지 번호 붙이기 파이썬 DFS

https://www.acmicpc.net/problem/2667 2667번: 단지번호붙이기 과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지

thingjin.tistory.com

 

이 문제와 알고리즘이 유사한 문제이다.

 

내가 문제를 계속 틀렸었는데..

 

 

자꾸 RecursionError가 뜨는 것이다..!!



그래서 뭐가 잘못했나 정보를 찾아봤는데.

파이썬의 기본 재귀 깊이 제한은 1000이라고 배웠다.

그 제한을 해결하기 위해 답 코드 맨 윗줄을 보면 

import sys
sys.setrecursionlimit(10**6)

이게 있을 텐데,

파이썬의 재귀 스택 공간을 100000으로 확장 시켜주는 코드이다.

괜히 잘못 풀었나 하면서 다른 걸 만지지 말고 RecursionError가 발생한다면 저 코드를 입력해서 스택 공간을 넓혀 주면 된다!