[백준 python] bfs/dfs - 유기농 배추

이혜지·2022년 2월 24일
0

Algorithm

목록 보기
5/12
post-thumbnail

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

입력
입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트 케이스에 대해 첫째 줄에는 배추를 심은 배추밭의 가로길이 M(1 ≤ M ≤ 50)과 세로길이 N(1 ≤ N ≤ 50), 그리고 배추가 심어져 있는 위치의 개수 K(1 ≤ K ≤ 2500)이 주어진다. 그 다음 K줄에는 배추의 위치 X(0 ≤ X ≤ M-1), Y(0 ≤ Y ≤ N-1)가 주어진다. 두 배추의 위치가 같은 경우는 없다.

가로길이: M
세로길이: N
배추개수: K

BFS로 풀까,, DFS풀까 ~ 하다가
BFS는 큐로 푸는 문제가 좋으니까
이건 DFS로 걍 큐를 이용하지 않고 재귀를 이용해 풀었다.

풀이

import sys
sys.setrecursionlimit(10000)
t = int(input())

def dfs(x, y):
    if x <= -1 or x >= m or y <= -1 or y >= n:
        return 0
    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 1
    return 0

for _ in range(t):
    m, n, k = map(int, input().split())
    graph = [[0] * n for _ in range(m)]
    for i in range(k):
        x, y = map(int, input().split())
        graph[x][y] = 1
        
    result = 0
    for j in range(m):
        for r in range(n):
            if dfs(j, r) == 1:
                result += 1
    print(result)

📌 근데 런타임 에러가 계속 났다.
찾아보니까 재귀 호출 1000번하면 런타임 에러래

그래서

sys.setrecursionlimit(10000)

이거 추가해주니까 바로 해결됐다.
오늘 많이 배웠다.

profile
공유 문화를 지향하는 개발자입니다.

0개의 댓글