[백준1012/Python] 유기농 배추(DFS)

류성훈·2022년 6월 28일
0

코딩테스트

목록 보기
5/29

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

앞에 썼던 단지번호붙이기 문제와 거의 같다.
https://velog.io/@ryucherry/%EB%B0%B1%EC%A4%802667Python-%EB%8B%A8%EC%A7%80%EB%B2%88%ED%98%B8%EB%B6%99%EC%9D%B4%EA%B8%B0

그런데 이번엔 런타임 에러가 났다..

실패 코드

def dfs(x, y):
    dx = [1,-1,0,0]
    dy = [0,0,1,-1]
        
    for idx in range(4):
        nx = x + dx[idx]
        ny = y + dy[idx]
        
        if (0 <= nx < m) and (0 <= ny < n):
            if graph[ny][nx] == 1:
                graph[ny][nx] = 0
                dfs(nx, ny)
    
t = int(input())

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

예제 결과는 잘 나오는데 어디서 런타임에러가 난걸까?

import sys
sys.setrecursionlimit(10000)

파이썬의 기본 재귀 한도는 1000이고, 이를 넘어갈 경우에 추가로 모듈을 선언해야한다고 한다.
즉, 재귀호출이 1000이 넘는 테스트케이스가 있다는 것이다 ..!

메모 메모..

헷갈리는 점

우리가 흔히 방향에 대해 연산을 하려면 2차원그래프를 떠올리는데, 배열은 2차원그래프의 방향과 조금 다르다.
그러므로 x, y에 값을 줄 때 조금 집중을 하여 상관관계를 파악 후에 넣어야 할 것 같다.

profile
(전)Backend Developer / (현)Data Engineer

0개의 댓글