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에 값을 줄 때 조금 집중을 하여 상관관계를 파악 후에 넣어야 할 것 같다.